据我所知,当一个新线程产生时,它必须加入或分离,否则终止应该被调用,我有下面的代码,如果我加入它们就可以正常工作,但如果我调用分离而崩溃,我不是能够理解幕后发生的事情。
#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;
}
答案 0 :(得分:2)
只是分离一个主题并没有给予它超过主线程的权限。一旦主要线程退出,这就是球赛;堆被破坏,cout
之类的东西被清理掉了。如果任何剩余的线程在整个过程终止之前做任何事情,则会有明显的崩溃机会。
如果你detach
一个线程,请准备好提供自己的机制,以确保它不会超过主线程。