Ho esaminato la documentazione in http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html ma questo non è menzionato esplicitamente. Ogni pronta risposta sarà molto apprezzata.Le 2 variabili di condizione pthread possono condividere lo stesso mutex?
13
A
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.
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
Grazie mille. Qualche link pertinente? – Fanatic23
Google mostra questo esempio: http://cs.wmich.edu/~jjwillia/10.spring/cs4540/asgn2/pthreads-pro-con – xscott
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. ". –