std :: condition_variable :: wait_until的实现

时间:2015-09-01 09:18:53

标签: c++ multithreading condition-variable

我正在阅读GetValue(...)的libstdc ++ implementation,这里是来源:

std::condition_variable::wait_until

第二个函数调用循环中的第一个函数。它将进行时钟同步操作。如果我们调用第二个函数,同步操作可能会运行多次。每次都需要同步时钟吗?我认为代码在第二个函数中,只能通过同步时钟改进一次。我是对的吗?

2 个答案:

答案 0 :(得分:1)

我认为你是对的。另一方面,使用wait_until的假设通常是事件将只是稀疏地发生,并且除了少数不必要的唤醒之外,谓词返回true。因此,重新同步时钟的开销应该是最小的。还要记住,在这种情况下,线程必须已经被唤醒和分页,这可能比查询时钟更昂贵。

答案 1 :(得分:0)

是的,没有。

是的,此代码可以进行优化,以便在循环时不操纵time_point。但是,我不确定这是否真的有必要。

考虑使谓词wait_until循环的原因。

notified时,它会检查谓词以查看是否有工作要做。

  1. 如果谓词返回true,即条件变量保护的条件为真,wait_until将返回true
  2. 如果超时,wait_until将返回谓词的值,通常为false(否则我们会预期condition_variable已被通知)。
  3. 这只留下一个循环实际循环的情况:当condition_variable被通知时,谓词返回false

    这被称为spurious wakeup并不是典型的情况,所以它并不值得优化。