使用 std::thread 来增强应用程序性能时,理解这一点至关重要调用 detach() 和不调用 detach() 之间的区别。
不调用detach(),创建的线程在自己的执行路径内独立运行。在这种情况下:
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called without detach"); }); //some code here }
主线程将执行“此处的一些代码”,而新创建的线程打印“线程调用而不分离。”
调用 detach() 会改变线程与主线程交互的方式:
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }
现在,主线程将在线程启动后立即执行“此处的一些代码”。重要的是,detach() 不会等待线程完成。
根据上述差异,请考虑以下准则:
仅在以下情况下使用 detach():
注意:
需要注意的是,当程序终止(即 main 返回)且分离线程仍然存在时运行时,它们的堆栈不会展开,可能会导致析构函数未执行。这可能会导致数据损坏和其他不良后果。
以上是分离或不分离:什么时候应该使用`std::thread::detach()`?的详细内容。更多信息请关注PHP中文网其他相关文章!