各种平台都允许虚假唤醒。为了解决这个问题,我们写了下面的循环机制:
while(ContinueWaiting())
cv.wait(lock); // cv is a `std::conditional_variable` object
同样的事情是可以理解的conditional_variable::wait_until()
。
但看看下面的例子:
const auto duration = Returns_10_seconds();
while(!Predicate())
cv.wait_for(lock, duration);
想象一下,虚假唤醒发生在 1 秒。尚未达到超时。
它会再等10秒吗?这将导致无限循环,我确信这不应该发生。从源代码,内部wait_for()
调用wait_until()
.
我想了解,如何wait_for()
处理虚假唤醒?