在C ++中进行多线程处理,只检查信号量是否被锁定

时间:2014-07-24 23:26:47

标签: c++ multithreading visual-c++ mutex semaphore

我正在尝试使用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应该锁定互斥锁。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

有一种称为"readers-writer lock"的锁可以解决您的问题。它适用于一个对象,其中可以有多个并发读取器,但一次只能有一个写入器(并且写入器会锁定读取器)。这听起来与您的应用非常相似,其中A,B和C被认为是读者,而Z被认为是作家。

答案 1 :(得分:3)

看看Slim Reader/Writer locks - 正是医生所要求的。只需让线程A,B和C在工作时读取锁定,并让线程Z在其工作时采用写锁定。

相关问题