请参阅以下代码:
boost::thread_group threads;
boost::barrier barrier(10);
thing pThing;
for( size_t i = 0; i < 10; ++i )
{
threads.create_thread(
[&barrier, &pThing]()
{
while( true )
{
// do some stuff with pThing
if( barrier.wait() ) // let all threads catch up before resettings, and only 1 thread resets
pThing.Reset();
barrier.wait(); // let all threads wait until the reset is completed
}
});
}
threads.join_all();
join_all()
会完成,因为所有线程都是无限循环的吗?barrier.wait()
是interruption point吗?join_all()
如果它后面的线程组正好死了?答案 0 :(得分:1)
interrupt_all()
先呼叫。interrupt()
调用在一个线程上设置了这个标志,另外,如果那是当前正在做的事情,那么线程就会停止等待。join_all()
然后才销毁线程组对象。