其他分享
首页 > 其他分享> > c – 我什么时候应该使用std :: thread :: detach?

c – 我什么时候应该使用std :: thread :: detach?

作者:互联网

有时我必须使用std :: thread来加速我的应用程序.我也知道join()等待一个线程完成.这很容易理解,但调用detach()和不调用它有什么区别?

我认为没有detach(),线程的方法将独立使用线程.

不分离:

void Someclass::Somefunction() {
    //...

    std::thread t([ ] {
        printf("thread called without detach");
    });

    //some code here
}

呼叫分离:

void Someclass::Somefunction() {
    //...

    std::thread t([ ] {
        printf("thread called with detach");
    });

    t.detach();

    //some code here
}

解决方法:

在std :: thread的析构函数中,如果符合以下条件,则调用std :: terminate:

>线程未加入(使用t.join())
>并且没有分离(使用t.detach())

因此,在执行流程到达析构函数之前,应始终加入或分离线程.

当程序终止(即主要返回)时,不等待在后台执行的剩余分离线程;相反,他们的执行被暂停,他们的线程本地对象被破坏.

至关重要的是,这意味着这些线程的堆栈没有被解开,因此一些析构函数不会被执行.根据这些破坏者应该采取的行动,这可能就像程序崩溃或被杀死一样糟糕.希望操作系统将释放文件锁等…但你可能已经损坏共享内存,半写文件等.

那么,你应该使用加入还是分离?

>使用加入
>除非你需要更多的灵活性并且愿意提供同步机制来等待你自己的线程完成,在这种情况下你可以使用detach

标签:stdthread,c,c11
来源: https://codeday.me/bug/20190916/1807197.html