如何终止或停止 c 中的分离线程?

新手上路,请多包涵

我有兴趣在 C++ 中终止/停止/杀死一个分离的线程。如何才能做到这一点?

 void myThread()
{
    int loop = 0;
    while(true)
    {
        std::this_thread::sleep_for(std::chrono::seconds(5));
        ++loop;
    }
}

void testThread()
{
    std::thread globalThread(myThread);
    globalThread.detach();
}

int main(void)
{
    testThread();
    for(unsigned int i=0; i < 1000; i++)
    {
        cout << "i = " << i << endl;
    }
    return 0;
}

我想“停止”/“终止” globalThread() 的原因是因为 valgrind 列出了这是一种“可能丢失”的内存泄漏类型(152 字节)。处理这个问题的最佳方法是什么?

原文由 code 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
1 个回答

没有规定停止另一个线程;无论是分离的,还是可连接的。

停止线程的唯一方法是让线程从初始线程函数返回。

在这种特殊情况下,我建议进行以下更改:

  1. 不要拆线。在 main() 中实例化它。
  2. 添加一个布尔值和一个 std::mutex ,布尔值被初始化为 false
  3. 每次通过线程的内部循环,使用 std::unique_lock 锁定互斥锁,取布尔值,然后解锁互斥锁。解锁互斥锁后,如果 bool 为 true ,则跳出循环并返回。
  4. 在 main() 中,退出前:锁定互斥体,将 bool 标志设置为 true ,解锁互斥体,然后加入线程

这并不完美,因为第二个线程最多需要五秒钟来检查 bool 标志并返回。但是,这将是第一步。

原文由 Sam Varshavchik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏