【问题标题】:purpose for wait_for function in condition variable - C++11条件变量中 wait_for 函数的用途 - C++11
【发布时间】:2018-12-11 10:34:39
【问题描述】:

我是条件变量、多线程和互斥锁的新手,对此我有一个基本问题。

来自 en.cppreference.com on wait_for 的引述 - “阻塞当前线程,直到条件变量被唤醒或在指定的超时持续时间之后”

为什么要在指定的持续时间后解除当前线程的阻塞。条件变量的基本目的是在“条件”发生时进行通知。如果线程被唤醒,例如,每 500 毫秒,它不会导致开销吗?虚假唤醒也被内置为一种安全机制,以防通知调用未发生/失败等。

我显然在这里遗漏了一些基本的东西,但不确定它是什么。任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:

    这种情况的用例是如果您想等待事件发生,但不是无限期地。

    可能在超时后,您想通知用户获取结果的时间比预期的要长。也许您想触发取消提供结果的任务。

    正如您正确指出的那样,这会导致额外的开销,因此只有在您确实有一些合理的事情可以对过期超时做出反应时,才有意义使用它而不是 wait

    虚假唤醒与其说是一种安全机制,不如说是某些硬件架构强加的不幸必要性。在一个完美的世界中(即一个您只使用谓词调用 wait 函数的世界),永远不会发生虚假唤醒。

    【讨论】:

      【解决方案2】:

      如果线程被唤醒,比如说,每 500 毫秒?

      wait_for 不是这样工作的。让我们暂时忽略虚假唤醒。该函数将在收到通知或计时器到期时唤醒。另一种看待它的方式:等待通知,但不超过rel_time时间。

      当通知机制可能崩溃时,它可以用来避免无限等待。或者,如果通知没有及时到来,您需要采取行动。

      虚假唤醒是现代软件/硬件架构现实的不良副作用。 This answer 解释的很好。

      【讨论】:

        猜你喜欢
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 2021-02-07
        • 1970-01-01
        • 2012-08-14
        相关资源
        最近更新 更多