运行Thread和线程对象之间的关系

时间:2017-08-16 03:44:33

标签: c++ multithreading c++11 concurrency

在学习基本的线程管理时,我发现很难从书中理解这些行(粗体)。

  

一旦你开始你的线程,你需要明确决定是否   等待它完成(通过加入它 - 参见第2.1.2节)或   让它独立运行(通过拆卸 - 见2.1.3节)。如果你   在std :: thread对象被销毁之前不要决定你的   程序终止(std :: thread析构函数调用   的std ::结束())。因此,你必须确保   线程正确连接或分离,即使存在   例外。有关处理此方案的技术,请参阅第2.1.3节。   请注意,您只需在std :: thread之前做出此决定   对象被破坏 - 线程本身可能已经完成了很长时间   在你加入它或分离之前,如果你分开它,那么   在std :: thread对象之后,线程可能会继续运行很长时间   破坏。

线程对象被销毁后,线程何时运行?任何人都有示例代码或任何参考?

1 个答案:

答案 0 :(得分:3)

这意味着线程的生命周期与线程对象的生命周期无关。

以下代码:

#include <thread>
#include <iostream>

int main() {
    { //scope the thread object
        std::thread thr = std::thread([]() {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            std::cout << "Thread stuff\r\n";
        });
        thr.detach();
    } //thr is destroyed here
    std::cout << "thr destroyed, start sleep\r\n";
    std::this_thread::sleep_for(std::chrono::seconds(10));
    std::cout << "sleep over\r\n";
}

将输出:

thr destroyed, start sleep
Thread stuff
sleep over