2014-07-24 53 views
3

我想解決我在windows上使用C++的問題。C++中的多線程,只檢查信號量是否鎖定

比方說,我有螺紋A B C和線程ž。 A B C和Z都通過套接字嚮應用程序發送數據。但是當Z傳輸數據時,我希望A B和C等待Z完成,然後恢復。

A B C可以同時嚮應用發送數據

我想使用互斥鎖來阻止A B C在Z運行時運行,但是我發現即使Z沒有運行,A B C也不會因爲該互斥而同時運行。

所以我的問題最終是,是否有C++中的方法,讓我檢查,如果互斥被鎖定,如果被鎖定,等待互斥被解鎖,但DO NOT鎖定互斥?

我不想讓A,B和C鎖定互斥鎖。只有Z應該鎖定互斥鎖。

任何幫助,將不勝感激。

回答

5

有一種稱爲"readers-writer lock"的鎖可以解決您的問題。它適用於可以有多個併發讀取器但一次只有一個寫入器(並且作者鎖定讀取器)的對象。這聽起來非常類似於你的應用程序,其中A,B和C被認爲是讀者,Z被認爲是作家。

3

看看Slim Reader/Writer locks - 正是醫生的要求。只有線程A,B和C在工作時讀取鎖,並且在線程Z正在工作時讓線程Z獲取寫鎖。