next up previous contents index return to home!
Next: Semafori classici Up: Attesa di una condizione Previous: Attesa di una condizione   Indice   Indice analitico


Un Esempio: Meccanismi di sincronizzazione su una condizione

In questo esempio vedremo come dei thread possano bloccarsi in attesa che una certa condizione, associata in maniera implicita a una variabile di tipo pthread_cond_t sia verificata.

Esempio

L'esempio verte sempre sul problema dei lettori e degli scrittori. In questo caso gli scrittori inseriscono i dati in un buffer circolare di lunghezza definita dalla macro LUN, e si bloccano solo se il buffer è già pieno. L'unico thread che legge continua ad estrarre caratteri e si blocca solamente quando il buffer risulta essere vuoto.

Le strutture dati che si sono viste fino ad ora sono più che sufficienti per bloccare un thread in attesa che una certa condizione si verifichi. Appare anche più che logica la scelta di dividere i semafori nelle due tipologie di semafori di mutua esclusione e semafori di condizione. Manca però ancora un meccanismo sintattico che sia simile alle primitive semaforiche viste durante il corso e che fanno parte dei trattati classici di Sistemi Operativi.

Domanda: Nell'esempio è necessario che il thread lettore ottenga anche il semaforo di mutua esclusione? La risposta cambierebbe se ci fossero due thread che leggono? Giustificare la risposta con degli esempi.


next up previous contents index
Next: Semafori classici Up: Attesa di una condizione Previous: Attesa di una condizione   Indice   Indice analitico
Giuseppe Lipari 2002-10-27