在条件上等待的线程的有序通知(C ++,boost)

时间:2013-12-26 19:41:49

标签: c++ multithreading condition-variable

有没有人知道一个条件变量类,它允许通知等待条件的线程按照它们开始等待的顺序得到通知?

我目前正在使用boost类condition_variable,但调用condition_variable::notify_one()会唤醒随机线程,而不是首先调用condition_variable::wait()的线程。我还尝试在调用condition_variable::wait()之前将线程ID添加到队列中,以便我可以调用所有等待线程唤醒的condition_variable::notify_all(),检查队列并再次等待或继续(只有一个线程,即首先在队列中的线程)。问题是两次调用notify_all()并不能保证所有线程都被唤醒两次,从而失去通知。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

奇怪的是,您需要按特定顺序唤醒线程并且听起来对您的设计持怀疑态度。无论如何,你可以拥有条件变量队列(每个线程一个),你可以从队列顶部调用notify_one()。在等待线程中,您需要执行其他逻辑来检查它是否偶尔因等待而中断。再次听起来很奇怪,为什么你需要线程按特定顺序唤醒,你可能想重新考虑你的设计。