c++ - 给自己一个 std::shared_ptr<std::thread> 。定义或未定义的行为

标签 c++ multithreading c++11 shared-ptr

我有以下代码:

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();

...生成一个后台线程,该线程会自行清理。

关于c++ - 给自己一个 std::shared_ptr<std::thread> 。定义或未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513463/

相关文章:

java - 无法使用 execl() 启动 jar

c# - 在发生异常时将自定义对象传递给 RunWorkerCompleted 事件

c++ - 如何从文件中只读取一行

c++ - 如何根据模板类型参数调用不同的函数?

c++ - 为什么 pthread 条件变量被挂起?

C++ - 参数由基类的构造函数使用的构造函数

c++ - 静态链接到 libopenblas

c++ - 在静态库中存储线程 ID 的正确方法

python - 无法退出异步 Web.py Web 服务器

c++ - std::next_permutation 实现说明