【问题标题】:How works std::condition_variable::wait_until如何工作 std::condition_variable::wait_until
【发布时间】:2020-04-09 12:47:15
【问题描述】:

为什么这段代码运行得非常快?

int main() {
    std::condition_variable cv;
    std::mutex mtx;
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait_until(lock, std::chrono::system_clock::now() + 10000ms);

    return 0;
}

似乎 wait_until 被忽略了

【问题讨论】:

    标签: c++ condition-variable


    【解决方案1】:

    您可能会收到spurious wakeup。尝试使用接受谓词的重载...

    #include <condition_variable>
    
    int main() {
        std::condition_variable cv;
        std::mutex mtx;
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait_until(lock, std::chrono::system_clock::now() + 10000ms, []{ return false; });
    
        return 0;
    }
    

    【讨论】:

    • 我试图在demo on coliru 中说明这一点,但我未能实现虚假唤醒(在我所做的两到三个测试运行中)。虽然我同意你的结论,但虚假的唤醒并不是你可以依赖的。 ;-)
    • @Scheff 是的。它们有点像公共汽车:等了很久,然后同时出现了几十个 :-)
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多