中断点和清洁退出
interruption points and clean exiting
查看以下代码:
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();
问题:
- 我是否需要一种方法来打破while(true)的线程正确退出?
- 将
join_all()
完成,因为所有的线程是无限循环? - 当一个线程完成它的工作后会发生什么,它死了吗?
-
barrier.wait()
是中断点吗? 中断点只是产生线程吗? - 当thread_group死亡时会发生什么;我甚至需要
join_all()
,如果线程组,它会死后,无论如何?
- 不,你也可以用异常终止一个线程。中断异常是一个干净的方法。
- 先发出
interrupt_all()
呼叫。 - 无法恢复。
- 是的。 我不明白你的问题。中断点是"我被打断了吗?"'标志被检查,如果为真,则抛出异常。
- 据我所知,线程继续存在,即它们不会以某种方式被迫死亡。你需要确保线程退出(这本质上取决于你的线程执行什么代码),然后
join_all()
,然后销毁线程组对象。
interrupt()
调用在线程上设置此标志,另外,如果线程当前正在执行此操作,则使线程停止等待。相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 退出简单while循环时出现问题
- 正确清洁 QVector
- 使用vscode调试时,GDB意外退出
- pclose() 不会给我进程退出代码
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++逗号分隔的输入数组代码过早退出
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 中断点和清洁退出