给自己一个std::shared_ptr<std::thread>。已定义或未定义的行为
Giving a std::shared_ptr<std::thread> to itself. Defined or Undefined behavior
我有以下代码:
void launchThread() {
std::shared_ptr<std::thread> t;
t = std::make_shared<std::thread>([t] {std::cout<< "HelloWorld"<<std::endl;});
t->detach();
}
int main(){
launchThread();
somthing that takes a while....
}
如果我是正确的,thead 应该使用共享指针使自己保持活动状态,直到线程本身超出范围。但我想知道当共享指针被破坏时会发生什么,线程是否会被正确清理?或者这是不好的做法?
std::thread::detach
释放所有权 - 当 shared_ptr
被销毁时,分离的执行线程不会发生任何事情。
这是不好的做法,因为您可以简单地写...
std::thread{[]{ std::cout<< "HelloWorld" << std::endl; }}.detach();
...生成一个自行清理的后台线程。
我有以下代码:
void launchThread() {
std::shared_ptr<std::thread> t;
t = std::make_shared<std::thread>([t] {std::cout<< "HelloWorld"<<std::endl;});
t->detach();
}
int main(){
launchThread();
somthing that takes a while....
}
如果我是正确的,thead 应该使用共享指针使自己保持活动状态,直到线程本身超出范围。但我想知道当共享指针被破坏时会发生什么,线程是否会被正确清理?或者这是不好的做法?
std::thread::detach
释放所有权 - 当 shared_ptr
被销毁时,分离的执行线程不会发生任何事情。
这是不好的做法,因为您可以简单地写...
std::thread{[]{ std::cout<< "HelloWorld" << std::endl; }}.detach();
...生成一个自行清理的后台线程。