Diffondi il sapere

Nei sistemi concorrenti (o sistemi a concorrenza) la race condition (o corsa critica) è una situazione in cui il risultato dell’esecuzione di un insieme di processi, che condividono un’area di memoria, un file, una periferica, …, dipende dall’ordine in cui essi sono eseguiti. Ciò avviene quando tali processi hanno accesso in scrittura alla risorsa condivisa e l’ordine di esecuzione dipende dalla loro temporizzazione, rendendo non predicibile il valore finale assegnato a tale risorsa. L’impossibilità di garantire l’esecuzione dei processi nell’ordine stabilito dal programmatore può portare a instabilità del sistema, a malfunzionamenti e vulnerabilità (Meltdown ne è un esempio).

Immaginiamo un algoritmo che legga da un file il valore di un contatore, lo incrementi di una unità e quindi scriva il nuovo valore nel file. Nell’idea del programmatore l’algoritmo dovrebbe servire per tenere traccia del numero totale dei visitatori su una pagina web. Questo è un tipico esempio di corsa critica in quanto più istanze dell’algoritmo possono essere chiamate contemporaneamente da visitatori diversi e il numero memorizzato nel file condiviso dipende dalla velocità, e quindi dall’ordine, con cui le diverse istanze dell’algoritmo modificano tale risorsa. Esiste quindi un conflitto nell’uso della risorsa stessa e senza una corretta gestione della concorrenza (ad es. tramite i semafori) non si può garantire che il valore del contatore sarà incrementato ad ogni visita, perché la lettura (da parte dell’ultima istanza) potrebbe avvenire prima che il file sia stato aggiornato dalle istanze precedenti.

– Il vs M° Mescitore

© RIPRODUZIONE RISERVATA

Diffondi il sapere

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *