C++ 中断点和清洁退出

C++ 中断点和清洁退出,c++,multithreading,boost,c++11,boost-thread,C++,Multithreading,Boost,C++11,Boost Thread,请参阅以下代码: 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 )

请参阅以下代码:

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();
boost::thread\u组线程;
升压:势垒(10);
事物加工;
对于(尺寸i=0;i<10;++i)
{
threads.create_线程(
[&barrier,&pThing]()
{
while(true)
{
//做一些关于pThing的事情
if(barrier.wait())//让所有线程在重置之前赶上,并且只重置1个线程
pThing.Reset();
barrier.wait();//让所有线程等待重置完成
}
});
}
线程。连接所有线程();
问题:
  • 我是否需要一种方法来中断while(true)以使线程正确退出
  • 既然所有线程都是无限循环,那么
    join\u all()
    会完成吗
  • 当一根线完成它的工作时会发生什么,它会死吗
  • barrier.wait()
  • 中断点只是产生线程吗
  • 线程组死亡时会发生什么;如果线程组在之后马上就会消亡,我是否需要
    加入所有线程()
  • 不,您也可以终止线程,但有例外。中断异常是一种干净的方法
  • 首先发出
    interrupt\u all()
    调用
  • 是的,无法恢复
  • 我不明白你的问题。中断点是选中“am-I-interrupted”标志的点,如果为真,则引发异常
    interrupt()
    call在线程上设置此标志,此外,如果线程当前正在执行此操作,则会使线程停止等待
  • 据我所知,线程仍然存在,也就是说,它们不会以某种方式被迫消亡。您需要确保线程确实退出(这本质上取决于线程执行的代码),然后
    join_all()
    ,然后才销毁线程组对象
  • 不,您也可以终止线程,但有例外。中断异常是一种干净的方法
  • 首先发出
    interrupt\u all()
    调用
  • 是的,无法恢复
  • 我不明白你的问题。中断点是选中“am-I-interrupted”标志的点,如果为真,则引发异常
    interrupt()
    call在线程上设置此标志,此外,如果线程当前正在执行此操作,则会使线程停止等待
  • 据我所知,线程仍然存在,也就是说,它们不会以某种方式被迫消亡。您需要确保线程确实退出(这本质上取决于线程执行的代码),然后
    join_all()
    ,然后才销毁线程组对象

  • 我需要额外调用boost::this_thread::yield()还是barrier::wait()也有同样的用途?
    yield()
    实际上很少有用,而且肯定不会与
    wait()
    结合使用
    yield()
    基本上有“我有工作要做,但会暂停一点以释放CPU来做其他事情”的意思,而
    wait()
    更多的意思是“我现在没有什么事情要做,所以我会无所事事地(无限期地)等待,直到有东西出现”。我需要额外调用boost::this_thread::yield()还是barrier::wait())出于同样的目的?
    yield()
    实际上很少有用,而且肯定不会与
    wait()
    结合使用
    yield()
    的基本意思是“我有工作要做,但会暂停一段时间以释放CPU来做其他事情”,而
    wait()
    的意思是“我现在没有什么事情要做,所以我会无所事事地(无限期地)等待,直到有东西出现”。