C ++ 11线程分离无法正常工作

时间:2017-04-09 09:54:16

标签: multithreading 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;
}

1 个答案:

答案 0 :(得分:2)

只是分离一个主题并没有给予它超过主线程的权限。一旦主要线程退出,这就是球赛;堆被破坏,cout之类的东西被清理掉了。如果任何剩余的线程在整个过程终止之前做任何事情,则会有明显的崩溃机会。

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