我正在阅读GetValue(...)
的libstdc ++ implementation,这里是来源:
std::condition_variable::wait_until
第二个函数调用循环中的第一个函数。它将进行时钟同步操作。如果我们调用第二个函数,同步操作可能会运行多次。每次都需要同步时钟吗?我认为代码在第二个函数中,只能通过同步时钟改进一次。我是对的吗?
答案 0 :(得分:1)
我认为你是对的。另一方面,使用wait_until的假设通常是事件将只是稀疏地发生,并且除了少数不必要的唤醒之外,谓词返回true。因此,重新同步时钟的开销应该是最小的。还要记住,在这种情况下,线程必须已经被唤醒和分页,这可能比查询时钟更昂贵。
答案 1 :(得分:0)
是的,没有。
是的,此代码可以进行优化,以便在循环时不操纵time_point
。但是,我不确定这是否真的有必要。
考虑使谓词wait_until
循环的原因。
当notified时,它会检查谓词以查看是否有工作要做。
wait_until
将返回true
。wait_until
将返回谓词的值,通常为false
(否则我们会预期condition_variable
已被通知)。这只留下一个循环实际循环的情况:当condition_variable
被通知时,谓词返回false
。
这被称为spurious wakeup并不是典型的情况,所以它并不值得优化。