consideri la seguente situazione:Attendere più thread (thread Posix, C++)
Ho un foo oggetto che viene utilizzato da più fili, che può o non può chiamare ripetutamente una barra metodo() su foo.
È perfettamente possibile (e desiderato) che la barra() venga eseguita più volte in parallelo, poiché non modifica mai lo stato di foo.
Il problema sorge quando ho bisogno di cambiare lo stato di foo dall'esterno (da un altro thread, non da uno dei thread "worker") - come posso bloccare foo in un modo tale che il thread chiamante blocchi fino a quando l'ultimo thread di lavoro viene eseguito con bar() e tutti i thread di lavoro verranno bloccati a bar() fino a quando non rilascii nuovamente foo?
Ovviamente non posso semplicemente usare un mutex che rimane bloccato durante l'esecuzione di bar(), perché in quel caso non avrò concomitanza.
Qualche idea? O c'è un design migliore per quei tipi di problemi?
Vedere [Blocco Readers-writer] (http://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock) – hmjd
perché non introdurre un mutex nei thread worker attorno alla chiamata della funzione bar e su anche sul thread chiamante che vuole cambiare lo stato foos. il thread chiamante blocca il mutex e può tranquillamente cambiare lo stato di foo. – mgr
'pthread_rwlock_t' potrebbe interessarti. – WhozCraig