我是条件变量、多线程和互斥量的新手,对此我有一个基本问题。
引自 en.cppreference.com 关于 wait_for - “阻塞当前线程,直到条件变量被唤醒或在指定的超时持续时间之后”。
为什么要在指定的持续时间后解除当前线程的阻塞。条件变量的基本目的是在“条件”发生时发出通知。如果线程每 500 毫秒被唤醒一次,它不会导致开销吗?虚假唤醒也作为一种安全机制内置,以防通知调用没有发生/失败等。
我显然在这里遗漏了一些基本的东西,但不确定它是什么。任何帮助表示赞赏。
最佳答案
此用例是您希望等待事件发生,但不是无限期发生。
也许超时过后,你想通知用户获取结果的时间比预期的要长。也许您想触发取消提供结果的任务。
正如您正确指出的那样,这会导致额外的开销,因此只有当您确实有一些合理的事情可以对过期的超时使用react时,才使用它而不是 wait
才有意义。
虚假唤醒与其说是一种安全机制,不如说是某些硬件架构强加的一种不幸的必需品。在一个完美的世界中(即一个你只用谓词调用 wait
函数的世界),永远不会发生虚假唤醒。
关于c++ - 条件变量中 wait_for 函数的用途 - C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722241/