c++ - 条件变量中 wait_for 函数的用途 - C++11

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

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

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

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

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

最佳答案

此用例是您希望等待事件发生,但不是无限期发生。

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

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

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

关于c++ - 条件变量中 wait_for 函数的用途 - C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722241/

相关文章:

c++ - 我应该在构造函数中调用成员函数吗

c++ - all_image_infos 由 OS X c++ 上的 pid

c++ - 为什么 std::accumulate 在 C++20 中没有被设为 constexpr?

c++ - GCC NRVO/RVO 警告

c++ - 关于shared_ptr的atomic_exchange_strong_explicit的实现

c++ - 代码在 Sun Studio 上编译但在 gcc 上出错

c++ - 为什么不允许 `std::uniform_int_distribution<uint8_t>` 和 `std::uniform_int_distribution<int8_t>`?

c++ - condition_variable 获取锁速度慢

c - 如何在障碍处正确同步线程

java - 模拟交通信号(单盒)