C++中的多线程,只检查信号量是不是被锁定
Posted
技术标签:
【中文标题】C++中的多线程,只检查信号量是不是被锁定【英文标题】:Multithreading in C++, only check if semaphore is lockedC++中的多线程,只检查信号量是否被锁定 【发布时间】:2014-07-24 23:26:46 【问题描述】:我正在尝试使用 c++ 解决我在 Windows 上遇到的问题。
假设我有线程 A B C 和线程 Z。 A B C 和 Z 都通过套接字向应用程序发送数据。但是Z在传输数据的时候,我想让A B和C等Z完成,然后再继续。
A B C可以并发向应用发送数据。
我正在尝试使用互斥锁来防止 A B C 在 Z 运行时运行,但我发现即使 Z 没有运行,由于该互斥锁,A B C 也不会同时运行。
所以我的问题最终是,在 C++ 中是否有一种方法可以让我检查互斥锁是否被锁定,如果它被锁定,则等待互斥锁解锁,但 不要 锁定互斥体?
我从不希望 A、B 和 C 锁定互斥锁。只有 Z 应该锁定互斥锁。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:有一种称为"readers-writer lock" 的锁可以解决您的问题。它适用于可以有多个并发读取器但一次只有一个写入器(并且写入器锁定读取器)的对象。这听起来与您的应用程序非常相似,其中 A、B 和 C 被视为读取器,Z 被视为写入器。
【讨论】:
【参考方案2】:看看Slim Reader/Writer locks - 正是医生所要求的。只需让线程 A、B 和 C 在工作时获取读锁,并让线程 Z 在其工作时获取写锁。
【讨论】:
以上是关于C++中的多线程,只检查信号量是不是被锁定的主要内容,如果未能解决你的问题,请参考以下文章
从 C++ 中的多个线程调用 Qt 中小部件类的信号函数是不是安全?