Sartomiki.net

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri

Semafori

E-mail Stampa PDF
Valutazione attuale: / 2
ScarsoOttimo 

semaforoUn semaforo è una variabile associata a una lista di processi. Esistono due operazioni fondamentali quella di abilitazione e quella di disabilitazione. Tramite i semafori è possibile sincronizzare più processi. In UNIX esistono principalmente due funzioni per la gestione dei semafori: wait e signal. Wait decrementa un contatore e se il contatore è minore di zero blocca il processo in attesa che esso torni di nuovo positivo. La signal incrementa il contatore. Signal e wait lavorano in mutua esclusione. I deadlock si verificano se un processo attende un evento che deve essere provocato da un processo bloccato. Lo starvation è un blocco perpetuo in cui un processo non viene mai rimosso dalla lista in cui è bloccato.

Produttore e consumatore in C
Il problema del produttore e del consumatore può essere realizzato tramite i semafori.

Produttore
INIT (FULL) = 0;
INIT ME_p = 1
while(1)
{
    produce (m);
    wait(EMPTY);
    wait(me_p);
    enter(m); // l'inserimento è protetto dagli altri produttori
    signal(ME_p);
    signal(FULL);
}

Consumatore
INIT (FULL) = MAX;
INIT (me_c) = 1;
while(1)
{
    wait(FULL);
    wait(me_c);
    n=remove(m); // la rimozione avviene ad opera di un solo consumatore
    signal(me_c);
    signal(EMPTY);
    consuma m;
}


Per le immagini Ringraziamo ©claud61
blog comments powered by Disqus
 

http://sartomiki.net/modules/mod_fuofb/assets/it/find-us-on-facebook-1.png

Follow me

Amici

Chi è online

 4 visitatori online

Siti amici

Banner

Notizie flash

Ora Sartomiki.net ha ben 200 appunti di 16 materie differenti! La sezione Appunti è davvero grande!

PUBBLICITA'