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

标签 c++ multithreading thread-safety

我对终止/停止/杀死 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 字节)。处理此问题的最佳方法是什么?

最佳答案

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

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

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

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

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

关于c++ - 如何终止或停止 C++ 中的分离线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655706/

相关文章:

c++ - 在 C++ 中模拟 C# 索引器

linux - cpu时间在虚拟机中跳跃很多

c++ - 如何避免线程+优化器==无限循环?

java - Java 中的不变性和同步

multithreading - 在 Perl 中是否有线程安全的打印方式?

c++ - 复制初始化: why move or copy constructor was not called even if copy-elision is turned off?

c++ - NetSSL 依赖项?

c++ - SDL 基准声音

Java : Using ExecutorService for httpRequests

c++ - 线程同步