In una macchina a singolo processore:
Quindi per garantire la mutua esclusione è sufficiente evitare che un processo venga interrotto
Questo può essere realizzato con apposite primitive del kernel per abilitare e disabilitare gli interrupt:
repeat
<disattiva le interruzioni>;
<sezione critica>;
<attiva le interruzioni>;
<resto del programma>;
forever
Problemi:
In sistemi con più unità di elaborazione non è sufficiente evitare che un processo venga interrotto: esistono istruzioni, rese disponibili da alcune architetture, che possono essere impiegate efficacemente per risolvere il problema della sezione critica
Queste particolari istruzioni atomiche permettono:
Istruzione TestAndSet: modifica il contenuto di una variabile in maniera atomica
Se si eseguono contemporaneamente due istruzioni TestAndSet, ciascuna in una unità di elaborazione diversa, queste vengono eseguite in maniera sequenziale in un ordine arbitrario
boolean TestAndSet(boolean *obiettivo)
{
boolean valore = *obiettivo;
*obiettivo = true;
return valore;
}