有人告诉我,如果一个线程出错,整个过程就会停止。我使用下面的c ++ 11代码做了一个简单的测试:
#include <iostream>
#include <thread>
#include <chrono>
void func1()
{
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout<<"exception!!!"<<std::endl;
throw(std::string("exception"));
}
void func2()
{
while (true)
{
std::cout<<"hello world"<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
std::thread t1(func1);
std::thread t2(func2);
t1.join();
t2.join();
return 0;
}
我编译了(g ++ -std = c ++ 11 -lpthread test.cpp)并执行了它。
5秒后,我收到了一个错误:Aborted (core dumped)
在我看来,每个线程都有自己的堆栈。在此示例中,如果t1
的堆栈死亡,为什么t2
无法继续?
答案 0 :(得分:0)
由于线程只将其堆栈作为私有,所有其他内容(堆,bss,数据,文本,env)在线程之间共享。一个线程崩溃将导致整个进程崩溃,因此t1影响了程序中的t2。