我编写了一个类似于以下结构的多线程程序(我省略了互斥和无关代码),当从线程调用时,它会阻塞对boost::thread_group.add_thread()
的调用。有什么方法可以解决这个问题吗?
boost::thread_group group;
void threaded_function2()
{
}
void threaded_function()
{
if( condition)
{
boost::thread *t3 = new boost::thread( boost::bind( &threaded_function2));
group.add_thread( t3); // <-- Blocks on this call
}
}
int main()
{
boost::thread *t1 = new boost::thread( boost::bind( &threaded_function));
boost::thread *t2 = new boost::thread( boost::bind( &threaded_function));
group.add_thread( t1);
group.add_thread( t2);
group.join_all();
return 0;
}
谢谢大家。
答案 0 :(得分:3)
如果我错了,请纠正我,但这里可能发生的事情是,在添加线程之前运行join_all调用,使thread_group对象阻塞直到其他线程被释放。一种解决方案是在main函数上创建一个互斥锁,以等待threaded_function完成以调用join_all方法。不过这是糟糕的设计。