【问题标题】: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 应该锁定互斥锁。

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多