我正在尝试使用c ++解决我在Windows上遇到的问题。
假设我有线程 A B C ,并且线程 Z 。 B C和Z都是通过套接字向应用程序发送数据。但是当Z传输数据时,我希望A B和C等待Z完成,然后恢复。
A B C 可以将数据发送到应用并发。
我正在尝试使用互斥锁来阻止A B C在Z运行时运行,但我发现即使Z没有运行,A B C也没有因为该互斥锁而同时运行。
所以我的问题最终是,C ++中是否有一种方法可以让我检查互斥锁是否被锁定,如果它被锁定,等待互斥锁解锁,但不要锁定互斥体?
我从不希望A,B和C锁定互斥锁。只有Z应该锁定互斥锁。
任何帮助都将不胜感激。
答案 0 :(得分:5)
有一种称为"readers-writer lock"的锁可以解决您的问题。它适用于一个对象,其中可以有多个并发读取器,但一次只能有一个写入器(并且写入器会锁定读取器)。这听起来与您的应用非常相似,其中A,B和C被认为是读者,而Z被认为是作家。
答案 1 :(得分:3)
看看Slim Reader/Writer locks - 正是医生所要求的。只需让线程A,B和C在工作时读取锁定,并让线程Z在其工作时采用写锁定。