我有一个简单的线程问题 - 如何同步以下内容?
我有主线程和辅助线程,它只执行一次某事 - 更多一次。
基本上:
辅助主题:
{
Do_Something_Once();
while (not_important_condition) {
Do_Something_Inside_Loop();
}
}
除非Do_Something_Once
操作完成,否则我想暂停我的主线程,现在我使用普通bool值is_something_once_done = false;
来指示操作是否已完成。
因此,我的 主线程 的代码如下所示:
{
Launch_Secondary_Thread();
while (!is_something_once_done) {
boost::this_thread::sleep(milliseconds(25));
}
}
这显然不是执行此类同步的最佳方式。
任何替代方案(如果boost::thread
支持,则更好)?
谢谢
答案 0 :(得分:4)
答案 1 :(得分:2)
您可以考虑使用boost's condition variable mechanism。它专为这种情况而设计。
答案 2 :(得分:1)
插入适合您平台的代码,我在下面添加了评论:
{
// Create event visible by second thread to be signalled on completion
Launch_Secondary_Thread();
// Wait for event to be signalled
}
{
Do_Something_Once();
// set the event state to signalled so that 1st thread knows to continue working
while (not_important_condition) {
Do_Something_Inside_Loop();
}
}
确保事件已发出信号,即使第二个线程在异常或其他错误后异常退出也是如此。如果没有,你的第一个线程永远不会醒来。除非你可以暂停等待。
答案 3 :(得分:0)
您可以自由使用互斥锁!
Do_Something_Once()
{
boost::mutex::scoped_lock(mutex);
// ...
}
更新
对于你的特定情况,我会使用条件变量,正如其他人建议的那样。