next up previous contents index return to home!
Next: Un Esempio: Meccanismi di Up: Multithreading Previous: Un esempio: Meccanismi di   Indice   Indice analitico


Attesa di una condizione

Come detto nella sezione 6.2 con i soli meccanismi di mutua esclusione l'unico meccanismo di attesa per il verificarsi di una certa condizione è quello del polling. Tale meccanismo è ovviamente dispendioso dal punto computazionale oltre che poco elegante.

Per ovviare a tale inconveniente lo standard Posix mette a disposizione un ulteriore meccanismo per consentire a un thread di bloccarsi in attesa che una certa condizione diventi vera.

Tale meccanismo si avvale della definizione di un nuovo tipo di dato (pthread_cond_t), contenente i campi necessari alla gestione del bloccaggio/sbloccaggio dei thread. Una variabile di tipo di tipo pthread_cond_t si chiama variabile condizione ed è associata in maniera implicita ad una condizione logica che si vuole verificare.

Le funzioni che operano su tale struttura dati sono :



#include<pthread.h>

int pthread_cond_wait (pthread_cond_t *cond_var, pthread_mutex_t *mutex);


Argomenti in ingresso :

cond
- Indirizzo di una istanza del tipo pthread_cond_t che rappresenta la condizione di sincronizzazione.
mutex
- Semaforo di mutua esclusione necessarrio alla gestione corretta consistenza dei dati.

Valore restituito :

0
- In caso di successo
${\bf\neq 0}$
- In caso di insuccesso.

La pthread_cond_wait serve per sincronizzarsi con una certa condizione all'interno di un blocco di dati condivisi e protetti da un semaforo di mutua esclusione. La presenza, fra gli input, del semaforo di mutua esclusione, nel caso della wait, serve a garantire che al momento del bloccaggio esso venga liberato per consentire ad altri thread di potere accedere alla zona di memoria condivisa. Inoltre, se la wait ritorna in modo regolare, allora il sistema garantisce che anche il semaforo di mutua esclusione sia stato nuovamente acquisito.

Si tenga inoltre presente che la funzione signal non libera il semaforo di mutua esclusione, poichè esso non è tra i suoi argomenti in ingresso, e quindi questo deve essere esplicitamente liberato per consentire l'accesso ai dati, in caso contrario si rischiano situazioni di deadlock.



Subsections
next up previous contents index
Next: Un Esempio: Meccanismi di Up: Multithreading Previous: Un esempio: Meccanismi di   Indice   Indice analitico
Giuseppe Lipari 2002-10-27