Hardware per la sincronizzazione

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

Mutua esclusione: supporto hardware

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:

Architetture di sincronizzazione

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;
}