Race condition
# Race condition

La race condition, chiamata in italiano situazione di corsa o semplicemente corsa, è un fenomeno che si presenta nei sistemi concorrenti quando, in presenza di una sequenza di processi multipli, il risultato finale dell'esecuzione dei processi dipende dalla temporizzazione o dalla sequenza con cui vengono eseguiti.

Le situazioni di corsa sono spesso effetti indesiderati e generano malfunzionamenti: in questo caso sono denominate corse critiche per il sistema.

## Elettronica

In elettronica esistono alcune interessanti applicazioni delle situazioni di corsa. Il circuito logico mostrato in figura, ad esempio, è spesso utilizzato per ottenere un impulso, corrispondente al fronte di salita del segnale originale A. Il ritardo di commutazione, introdotto dalla porta logica invertente, crea un ritardo nella determinazione del corretto stato logico della porta AND. In questo modo, ogni qual volta ci sarà un fronte di salita sul segnale A, in uscita dal circuito si otterrà un impulso di durata $Δt_1.$

La competizione tra il segnale originale A ed il segnale ritardato Ā genera una situazione di corsa per determinare lo stato finale del circuito logico.

## Informatica

Per evitare il verificarsi di situazioni di corsa quando si impiegano memorie, file o risorse in condivisione, sono stati studiati diversi algoritmi che prevedono la mutua esclusione, ovvero garantiscono che, quando la risorsa condivisa è interessata in un processo, nessun altro processo possa accedervi.

Se più processi hanno la possibilità di accedere ad una risorsa in modalità di scrittura, è importante prevedere ed includere l'utilizzo di questi algoritmi, dei quali si può invece fare a meno se la risorsa è accessibile solamente in modalità di lettura, perché i processi non possono influenzare lo stato della risorsa, quindi non è fisicamente possibile la realizzazione di situazioni di corsa.

## Casi reali

Un caso divenuto noto in cui una situazione di corsa ha generato malfunzionamenti molto pericolosi (e che viene spesso citato per spiegare e far comprendere come ciò possa accadere) è stato quello del Therac-25, un macchinario per la radioterapia prodotto ed impiegato in America settentrionale negli anni '80. Esso era equipaggiato per emettere sia elettroni a bassa energia in maniera diretta, sia raggi X, che venivano prodotti bombardando un bersaglio metallico con elettroni ad alta energia; l'emissione dei raggi X prevedeva anche l'attivazione di alcuni dispositivi meccanici di protezione. Nel momento in cui veniva impartita una determinata sequenza di comandi, apparentemente normale in condizioni di operatività ordinaria, si manifestava una situazione di corsa nel software di controllo della macchina che causava l'emissione degli elettroni alla massima energia senza che contemporaneamente venissero posizionati i dispositivi di protezione, e ciò causo la somministrazione di una dose di radiazioni 100 volte superiore a quella prevista a sei persone, tre delle quali morirono a causa di ciò.

