C++11 线程分离不起作用



我知道当生成一个新线程时,必须加入或分离它,否则将调用终止,我有以下一段代码,如果我加入它们,它可以正常工作,但是如果我调用分离就会崩溃,我无法理解引擎盖下发生了什么。

#include "iostream"
#include "thread"
#include "vector"
#include "algorithm"
#include "iterator"
#include "string"
#include "memory"
using namespace std;
void func() {
    cout << " func ";
}
int main(int argc , char** argv)
{
    std::vector< std::thread> m_vec;
    for(int i = 0; i < 100 ; i++){
        m_vec.push_back( std::thread(func));
        m_vec[i].detach();
    }
    return 0;
}

仅分离线程不会授予其比主线程更长的寿命。一旦主线程退出,那就是球赛;堆被销毁,cout之类的东西被清理。如果任何剩余的线程在整个进程终止之前执行任何操作,则它们都有明显的机会崩溃。

如果detach线程,请准备好提供自己的机制,以确保它不会超过主线程的寿命。

最新更新