代码之家  ›  专栏  ›  技术社区  ›  B. Dereij

给自己一个std::shared\u ptr<std::thread>。定义或未定义的行为

  •  2
  • B. Dereij  · 技术社区  · 8 年前

    我有以下代码:

    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应该使用共享指针保持自身活动,直到线程本身超出范围。但我想知道当共享指针被破坏时会发生什么,线程会被正确清理吗?还是这种做法不好?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Vittorio Romeo    8 年前

    std::thread::detach 释放所有权-当 shared_ptr 如果被破坏,分离的执行线程将不会发生任何事情。

    std::thread{[]{ std::cout<< "HelloWorld" << std::endl; }}.detach();
    

    ...生成一个后台线程,该线程在自身之后进行清理。