从线程调用add_thread时提升thread_group块,为什么?

时间:2011-10-22 22:56:26

标签: c++ multithreading boost boost-thread

我编写了一个类似于以下结构的多线程程序(我省略了互斥和无关代码),当从线程调用时,它会阻塞对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;
}

谢谢大家。

1 个答案:

答案 0 :(得分:3)

如果我错了,请纠正我,但这里可能发生的事情是,在添加线程之前运行join_all调用,使thread_group对象阻塞直到其他线程被释放。一种解决方案是在main函数上创建一个互斥锁,以等待threaded_function完成以调用join_all方法。不过这是糟糕的设计。