条件变量中 wait_for 函数的用途 - C++11
purpose for wait_for function in condition variable - C++11
我是条件变量、多线程和互斥体的新手,对此我有一个基本问题。
引自 en.cppreference.com wait_for - "blocks the current thread until the condition variable is woken up or after the specified timeout duration"。
为什么要在指定的持续时间后解除当前线程的阻塞。条件变量的基本目的是在 "condition" 发生时发出通知。如果线程每 500 毫秒被唤醒一次,它不会导致开销吗?虚假唤醒也作为一种安全机制内置,以防通知调用不 happen/fails 等
我显然在这里遗漏了一些基本的东西,但不确定是什么。任何帮助表示赞赏。
这个用例是如果你想等待事件发生,但不是无限期地发生。
也许在超时到期后,您想通知用户获取结果的时间比预期的要长。也许您想触发取消提供结果的任务。
正如您正确指出的那样,这会导致额外的开销,因此只有当您确实有一些合理的事情可以对过期的超时做出反应时,才使用它而不是 wait
才有意义。
虚假唤醒与其说是一种安全机制,不如说是某些硬件架构强加的不幸必需品。在一个完美的世界中(即一个你只用谓词调用 wait
函数的世界),永远不会发生虚假唤醒。
if the thread is woken up, say, every 500ms?
wait_for
不是这样的。让我们暂时忽略虚假唤醒。该功能将在收到通知或定时器到期时唤醒。另一种看待它的方式:等待通知,但不要超过 rel_time
时间。
它可用于避免无限等待,例如通知机制可能崩溃。或者,如果通知没有及时发出,您需要采取行动时。
虚假唤醒是现代 software/hardware 架构现实中不需要的副作用。 This answer 解释得很好。
我是条件变量、多线程和互斥体的新手,对此我有一个基本问题。
引自 en.cppreference.com wait_for - "blocks the current thread until the condition variable is woken up or after the specified timeout duration"。
为什么要在指定的持续时间后解除当前线程的阻塞。条件变量的基本目的是在 "condition" 发生时发出通知。如果线程每 500 毫秒被唤醒一次,它不会导致开销吗?虚假唤醒也作为一种安全机制内置,以防通知调用不 happen/fails 等
我显然在这里遗漏了一些基本的东西,但不确定是什么。任何帮助表示赞赏。
这个用例是如果你想等待事件发生,但不是无限期地发生。
也许在超时到期后,您想通知用户获取结果的时间比预期的要长。也许您想触发取消提供结果的任务。
正如您正确指出的那样,这会导致额外的开销,因此只有当您确实有一些合理的事情可以对过期的超时做出反应时,才使用它而不是 wait
才有意义。
虚假唤醒与其说是一种安全机制,不如说是某些硬件架构强加的不幸必需品。在一个完美的世界中(即一个你只用谓词调用 wait
函数的世界),永远不会发生虚假唤醒。
if the thread is woken up, say, every 500ms?
wait_for
不是这样的。让我们暂时忽略虚假唤醒。该功能将在收到通知或定时器到期时唤醒。另一种看待它的方式:等待通知,但不要超过 rel_time
时间。
它可用于避免无限等待,例如通知机制可能崩溃。或者,如果通知没有及时发出,您需要采取行动时。
虚假唤醒是现代 software/hardware 架构现实中不需要的副作用。 This answer 解释得很好。