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();//让所有线程等待重置完成
}
});
}
线程。连接所有线程();
问题:
join\u all()
会完成吗barrier.wait()
加入所有线程()
interrupt\u all()
调用interrupt()
call在线程上设置此标志,此外,如果线程当前正在执行此操作,则会使线程停止等待join_all()
,然后才销毁线程组对象interrupt\u all()
调用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()
的意思是“我现在没有什么事情要做,所以我会无所事事地(无限期地)等待,直到有东西出现”。