提升:等待工作线程等待条件变量

时间:2012-02-06 08:55:01

标签: c++ multithreading boost

情况

我有一个由condition_variable触发的工作线程来做一些工作。基本上它工作得非常好,而且应该如此。

问题

但是有一个问题:启动工作线程的线程可能会获得足够长的时间片来提供数据队列,并在工作线程尚未就绪时通知condition_variable ,即当它尚未到达condition_variable.wait()线时。

在我第一次调用wait()之前,是否有任何方法可以等待工作线程,以确保在我通知工作人员时 将被处理?

1 个答案:

答案 0 :(得分:2)

没有理由这样做。当工作线程准备就绪时,它将完成工作。它不需要由条件变量触发,因为它不会等待。

等待已经发生的事情是编码错误。如果你甚至想到这样做,你从根本上不了解条件变量。

在线程等待条件变量之前,必须确保它需要等待的东西。那个必须受到与条件变量关联的互斥锁的保护。当线程从条件变量wait返回时,它通常必须重新测试以确定它是否需要再次等待。