【发布时间】:2021-10-11 22:12:03
【问题描述】:
我正在编写以下 C++ 代码来创建分离线程:
void threadF() {
ofstream f("data") ;
for(int i=1; i<=5; i++) {
f<<"t1:::"<<i<<"\n" ;
f.flush() ;
sleep(1) ;
}
f.close() ;
}
int main() {
thread t1(threadF) ;
cout<<"main #1\n" ;
sleep(2) ;
t1.detach() ;
cout<<"main #2\n" ;
}
当我运行这段代码时,我有以下观察结果:
- 2 秒后主退出(如预期)
- 分离子线程似乎也只运行了 2 秒,因为输出
data文件仅包含 2 行。
我预计线程应该已经完全执行,并且输出 data 文件应该包含 5 行。这没有发生
我需要对此行为作出解释。
根据墨水What happens to a detached thread when main() exits?,这是否意味着分离的线程会在主线程退出时自动终止?
【问题讨论】:
-
如果你想等待线程完成,
join()它。 -
从
main返回结束进程,它杀死所有正在运行的线程。使用detatch通常是一个错误。你不知道线程会在什么时候死掉。它可能会在写入文件时死掉,并且(取决于操作系统和文件系统)它可能会使其处于损坏状态。 -
这并不能解决问题,但您无需致电
f.close() ;。析构函数会这样做。 -
'使用 detatch 通常是一个错误' nope.
标签: c++ multithreading