【发布时间】:2014-09-04 00:44:41
【问题描述】:
我有兴趣在 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 字节)。处理这个问题的最佳方法是什么?
【问题讨论】:
-
重申在这个问题和其他地方所说的话,你现在正在做的事情,甚至你似乎想要做的事情,都是不安全的。返回的主线程以非优雅的方式杀死
globalThread,唯一“正确”的做事方式是让主线程通过mutex等发送请求,以打破其循环,并拥有主线程join等待优雅终止确认。 -
看看这个 - [我的解决方案][1]。我已经回答了类似的问题。 [1]:stackoverflow.com/a/32338982/5163650
-
如果是 Windows,请尝试 TerminateThread()。看起来它可能是基于这些函数调用的 Windows。
标签: c++ multithreading thread-safety