2014-07-24 55 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获取写锁。