经过一些阅读,在我看来,没有任何可移植的方法可以保证分离的std::thread
在主线程完成执行后不会导致内存泄漏,甚至不会导致未定义的行为。一旦分离,它显然就无法连接,似乎没有检测分离线程是否从主线程退出的机制,STL也没有提供pthread_exit
的类似物。
在我看来,这意味着一旦我分离了一个线程,我基本上必须祈祷它在主线程从main
返回之前已经完成执行,否则可能会发生不好的事情。这是正确的吗?还是我错过了什么?
以保证分离的std::线程不会导致内存泄漏
main完成后,内存泄漏通常不是问题,因为程序无论如何都要终止。
,甚至在主线程完成执行后出现未定义的行为
不要触摸线程中的全局状态,也不要触摸main中的任何自动变量。或者,如果你这样做了,就不要分离。
在我看来,这意味着一旦我分离了一个线程,我基本上必须祈祷它已经完成了的执行
不完全是。你不一定需要关心螺纹加工。如果你真的需要关心,那就不要拆开那根线。
如何保证分离的C++线程的终止?
您不能。最多,您可以通过在main中等待一个条件变量并在线程结束时设置该变量来保证线程已经完成了它的工作。对于大多数目的来说,这是一种重新实现联接的复杂方法。