cod*_*ark 12 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;
}
Run Code Online (Sandbox Code Playgroud)
我之所以要"停止"/"终止"globalThread(),是因为valgrind列出了这种"可能丢失"的内存泄漏类型(152字节).处理这个问题的最佳方法是什么?
Sam*_*hik 10
没有规定可以阻止另一个线程; 它是分离的还是可加入的.
停止线程的唯一方法是让线程从初始线程函数返回.
在这种特殊情况下,我建议进行以下更改:
std::mutex将bool初始化为falsestd::unique_lock,取bool的值,然后解锁互斥锁.解锁互斥锁之后,如果bool是true,则跳出循环,然后返回.true,解锁互斥锁,然后加入线程这并不完美,因为第二个线程需要花费五秒钟来检查bool标志并返回.但是,这将是第一次.