停止不同线程中的无限循环
Stop infinite loop in different thread
在我的应用程序中,我使用多个线程来完成一些耗时的任务,该任务旨在在整个应用程序期间运行。我试图实现的是一些漂亮而干净的方法,在退出应用程序之前杀死第二个线程中的循环,这样我就可以在循环后清理然后关闭所有内容。
到目前为止,我已经提出了这种方法,但说实话,我不是它的忠实粉丝:
#include <iostream>
#include <thread>
bool stop_flag;
void foo()
{
while(!stop_flag)
{
//do something
}
clean_after();
}
int main()
{
stop_flag = false;
std::thread whileThread(foo);
// app lifetime
stop_flag = true;
whileThread.join();
return 0;
}
只需稍作更改,您的代码就可以了:
std::atomic<bool> stop_flag;
从
多个线程读取和写入同一个未同步变量无论如何都是未定义的行为。无论是否扇形,编译器可能只是优化检查,循环可能永远不会开始或永远不会结束。
如前所述,您可以使用 std::atomic_bool
.我不喜欢在全球范围内这样做 - 将其作为"取消令牌"传递给foo
。
void foo(std::atomic_bool& cancellation_token)
{
while(!cancellationToken)
{
//do something
}
clean_after();
}
相关文章:
- 为什么我不能在 while 循环中创建线程?
- Qt 在另一个线程中无限循环
- 如何在无限循环中启动和停止(切换)多个线程
- 更好的做法:永远循环线程或连续线程
- Qt的事件循环线程是安全的还是原子的?处理"队列连接"时如何同步?
- 停止不同线程中的无限循环
- 在调试线程时无限循环
- 线程:C++ 中无限循环线程的终止
- main 终止具有无限循环的线程
- C++线程&无限循环
- 无限循环多线程
- 英特尔 TBB 并行循环线程 ID
- 在Qt中,当事件循环线程拥有的QObject上的插槽正在执行时,QThread的事件循环是否会阻塞?
- 终止一个在无限循环中运行的std::线程
- 使用两个线程运行和中断一个无限循环
- 为什么我得到无限循环只有线程# 0后,所有5个线程运行多线程c++用餐哲学家谜语
- 两个线程进入无限循环
- 高频循环/线程定时
- 当循环/线程断点发生时
- 如何在无限循环中运行线程