2017-04-09 39 views
0

我明白,当一个新的线程被产生时,它必须被连接或分离,否则终止将被调用,我有下面的一段代码工作正常,如果我加入他们,但崩溃如果我呼吁分离,而我无法理解发生了什么。C++ 11线程detach不工作

#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; 
} 

回答

2

只是分离一个线程不会授予它超出主线程的权限。一旦主线退出,那就是球赛;堆被破坏,像cout这样的东西被清理。任何剩余的线程在整个流程结束之前,如果他们做了任何事情,都会面临崩溃的明显机会。

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