Quando piú processi accedono contemporaneamente alla stessa risorsa, fisica o logica, si ha la concorrenza, se l’esito delle operazioni dipende dall’ordine in cui vengono eseguite, allora si va incontro ad una corsa critica, la parte di codice che tratta questa corsa critica é detta sezione critica.

Condizioni delle sezioni critiche

Una soluzione al problema delle sezioni critiche deve soddisfare queste 3 condizioni:

Soluzione alla Sezione Critica

Variabili di turno

Approccio a livello di istruzioni, una variabile di turno viene condivisa, stabilisce quale puó usare una risorsa.

Come usarle per risolvere il problema delle sezioni critiche: Si usano 2 flag, inizializzati a false, che rappresentano quando un processo é o vuole entrare nella propria sezione critica, assieme ad una variabile di turno, inizializzata ad uno dei 2 processi.

Quando un processo vuole entrare nella propria sezione critica, imposta il proprio turno sull’altro e il proprio flag a true, al rilascio imposterá il proprio flag a false.

Grazie alla doppia condizione, se entrambi cercano di entrare contemporaneamente solo uno dei due ci riuscirá.

Questo metodo scala male all’aumentare dei processi.

Approccio a livelli di istruzione (variabili di lock)

In questo caso non sono i processi ad alternarsi ma bensí la risorsa ad avere una variabile che dica se é disponibile (0) o in uso (1). Quando un processo vuole utilizzare una risorsa, deve ottenere un lock in questo modo:

Al rilascio il lock viene reimpostato su 0.

Semafori Generalizzati e binari