【问题标题】:C++ condition variable and waitC++ 条件变量并等待
【发布时间】:2015-07-01 13:20:27
【问题描述】:

我试图弄清楚这段代码行的作用。当计数小于 6 时,它会暂停或等待或运行代码吗?

unique_lock<mutex> lck(mtx);
 cv.wait(lck, [this]() { return count <6; });

【问题讨论】:

    标签: c++ multithreading c++11 condition-variable


    【解决方案1】:

    它将等待直到cv 收到count &lt; 6 的通知。来自reference

    相当于

    while (!pred()) {
        wait(lock);
    }
    

    此重载可用于在等待特定条件变为真时忽略虚假唤醒。注意在进入这个方法之前必须获取锁,在wait(lock)退出后也会重新获取,即锁可以作为pred()访问的保护。

    您可以将谓词视为停止等待的终止条件。

    【讨论】:

    • 这就是我认为我将 count++ 添加到右击 cv.wait 但它不起作用。我试图让每个线程只打印 5 个字符。有什么想法吗?
    • @RamonLarodo wait() 块。它永远不会到达您的count++。你必须在不同的线程中增加它。
    • 能给我一个count++控制线程的示例代码吗?
    • @RamonLarodo 我发布的参考资料中有很多例子。
    • 谢谢巴里,但我不明白逻辑。好的,我创建了另一个线程来检查计数,但是我如何确保该控制器线程在每个线程运行后检查计数?我的意思是在线程 1 释放它的锁之前,线程 1 可能会打印 10 个字符而不是 5 个字符?所以当计数达到 5 时控制器线程不能中断,因为线程 1 有锁?我是对的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2023-03-09
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多