2010-10-31 3 views

risposta

17

Sì. Questa è a volte una buona idea se hai condizioni separate che ti piacerebbe aspettare. Ad esempio, potresti avere una coda e variabili condizionali sia per "non pieno" che per "non vuoto" ecc. ... Qualcuno che mette i dati in coda attende "non pieno". Qualcuno che preleva i dati dalla coda attende "non vuoto". Tutti usano lo stesso mutex.

+0

Grazie mille. Qualche link pertinente? – Fanatic23

+0

Google mostra questo esempio: http://cs.wmich.edu/~jjwillia/10.spring/cs4540/asgn2/pthreads-pro-con – xscott

+0

Commento molto tardivo, ma l'uso di 2 condvars con un mutex è in realtà una pratica consigliata in per esempio il caso di coda, vedi Programmazione di Butenhof con Posix Threads. ". –

21

Sì. Questo è pratice comune:

Esempio tipico:

mutex queue_mutex; 
cond queue_is_not_full_cond; 
cond queue_is_not_empty_cond; 

push() 
    lock(queue_mutex) 
     while(queue is full) 
     wait(queue_is_not_full_cond,queue_mutex); 
     do push... 
     signal(queue_is_not_empty_cond) 
    unlock(queue_mutex) 

pop() 
    lock(queue_mutex) 
     while(queue is empty) 
     wait(queue_is_not_empty_cond,queue_mutex); 
     do pop... 
     signal(queue_is_not_full_cond) 
    unlock(queue_mutex) 
+1

+1 per lo pseudo codice – Fanatic23