NoS*_*tAl 1 c++ multithreading c++11
有人会感兴趣的原因
//...
new std::thread (func,arg1,arg2);
}
Run Code Online (Sandbox Code Playgroud)
是std::thread析构函数(不像boost::thread)杀死线程.func完成是一段时间.我的问题是这种情况下的安全:
情况1:假设函数按值获取arg1,arg2.
情况2:假设函数通过引用获取arg1,arg2 - 如果你问我这听起来很糟糕,因为我认为在创建线程的范围结束时arg1和arg2将被它们的析构函数清除.
BTW是std :: thread析构函数(当func完成时调用AFAIK)足够聪明地清除线程使用的所有资源?我的意思是,如果我用新的线程创建1M线程(ofc不同时)并且所有线程完成,我是否永久地泄露了什么?
Kla*_*aim 10
std :: thread对象代表一个线程,它不是一个"真正的"线程,它是由OS管理的概念.
因此,在这里你泄漏了一个std :: thread对象,因为你没有删除它.析构函数永远不会被调用. 但它所表示的线程将在它的指令结束时结束,就像任何线程一样.
这样,当std :: thread实例被销毁时,你必须明确地说明你是否希望这个线程结束:如果你想让它继续,请调用detach(); 如果你想等待它结束,请调用join().
所以在你的情况下你泄漏了内存,但是线程应该继续,因为std :: thread对象永远存在,因为你失去了控制它的任何方法.
| 归档时间: |
|
| 查看次数: |
4865 次 |
| 最近记录: |