Per evitare il problema delle race condition si introduce l’idea di sezione critica: una sezione critica è un segmento di codice nel quale il processo può modificare variabili comuni, scrivere un file, aggiornare tabelle, ..
Quando un processo è in esecuzione nella propria sezione critica non si deve consentire a nessun altro processo di entrare in esecuzione nella propria sezione critica
L’esecuzione delle sezioni critiche da parte dei processi è mutuamente esclusiva nel tempo: n processi in competizione per l’uso di dati condivisi
Ciascun processo ha un segmento di codice chiamato sezione critica, in cui avviene l’accesso ai dati condivisi
Problema: assicurare che quando un processo P esegue la sua sezione critica nessun altro processo Q possa eseguire la propria sezione critica
Il problema della sezione critica si affronta progettando un protocollo che i processi possono usare per cooperare
Ogni processo deve chiedere il permesso di entrare nella propria sezione critica
La sezione di codice che realizza questa richiesta si chiama sezione di ingresso
La sezione critica può essere seguita da una sezione di uscita, e la restante parte del codice è detta sezione non critica
Per risolvere il problema della sezione critica, occorre soddisfare i tre seguenti requisiti:
Solo 2 processi, $P_0$ e $P_1$
Struttura generale di un tipico processo P:
do
{
sezione di ingresso
sezione critica
sezione di uscita
sezione non critica
} while (true);
I processi possono utilizzare delle variabili condivise per sincronizzarsi