考慮以下情況:等待多個線程(POSIX線程,C++)
我有一個是使用由多個線程的對象foo,其可以或可以不重複調用於foo的方法欄()。
bar()並行執行多次是完美的(也是期望的),因爲它永遠不會改變foo的狀態。
當我需要從外部(從另一個線程,而不是從「worker」線程之一)更改foo的狀態時,會出現問題 - 如何鎖定foo以便調用線程阻塞直到最後一個工作線程是用bar()完成的,並且所有工作線程都會在bar()處阻塞,直到我再次釋放foo爲止?
顯然,我不能只使用bar()執行過程中保持鎖定狀態的互斥鎖,因爲那樣我就沒有併發性了。
任何想法?還是有更好的設計來解決這些類型的問題?
請參閱[讀者 - 寫作者鎖定](http://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock) – hmjd
爲什麼不在工作線程中調用bar函數並在其上引入互斥鎖也在想要改變foos狀態的調用線程上。調用線程鎖定互斥鎖,並且可以安全地更改foo的狀態。 – mgr
'pthread_rwlock_t'可能會引起您的興趣。 – WhozCraig