SINCRONIZZAZIONE






Due processi  si dicono interagenti, quando l'avanzamento di uno dipende dall'avanzamento dell'altro.
L'interazione fra due processi  può essere di due tipi:

Competizione: i semafori

Quando n (n>1) processi  chiedono l'uso di una data risorsa non condivisibile, è necessario regolare l'accesso ad essa in maniera tale che:
Il meccanismo software che realizza queste condizioni è il semaforo mutex (mutue exclusion)
Un mutex è costituito dai seguenti elementi: La variabile s ha il seguente significato: Le primitive Attendi e Segnala sono implementate così:

Attendi Segnala
if (s==0)
<sospendi il processo>
else s=0;
<passa il processo da bloccato a pronto>
s=1

Le procedure Attendi e Segnala non possono essere interrotte mentre sono in esecuzione. Una procedura il cui codice non è "divisibile" in fase di esecuzione viene chiamata primitiva Un processo che vuole accedere ad una risorsa in mutua esclusione deve eseguire in successione le istruzioni:
Attendi
<usa la risorsa>
Segnala

Se Attendi trova s=0, l'esecuzione del processo viene sospesa e questo passa nella coda d'attesa del mutex. Se s=1, allora la risorsa è disponibile; in questo caso la primitiva Attendi porrà s=0 in modo da impedire ad altri processi di accedere alla risorsa. Al rilascio della risorsa il processo chiama la primitiva Segnala, che provvederà a trasferire nella coda dei pronti il primo processo in attesa sulla coda semaforica.
In alcuni casi si può verificare che alla risorsa possano accedere contemporaneamente (per es. perché sono presenti più unità della risorsa), un numero limitato di processi. Il meccanismo software che gestisce questo tipo di situazione è il semaforo n-ario.
Un semaforo n-ario è un semaforo, la cui la variabile semaforica può assumere un intervallo di valori interi compresi fra 0 e n. Le due primitive Attendi e Segnala si presentano così:

Attendi Segnala
if (s==0)
<sospendi il processo>>
s--;
;<passa il processo da sospeso a pronto>

s++

L'uso della risorsa, porta al decremento di s, mentre il suo rilascio comporta l'incremento.
Lo stato di un semaforo n-ario è "libero" quando la variabile semaforica è maggiore di 0 e "occupato" quando è uguale a zero . Questa variabile è decrementata automaticamente di uno ad ogni chiamata di Attendi, decrementata di 1 ad ogni chiamata di Segnala.
Il mutex è un caso particolare del semaforo n-ario, in cui n= 0,1 (il mutex viene chiamato anche semaforo binario).

N.B : Nella terminologia Windows il semaforo è "signaled"  quando s>0,  "non signaled"  quando s=0.