为什么一个线程的异常会阻止整个过程

时间:2018-03-19 09:35:24

标签: multithreading pthreads

有人告诉我,如果一个线程出错,整个过程就会停止。我使用下面的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无法继续?

1 个答案:

答案 0 :(得分:0)

由于线程只将其堆栈作为私有,所有其他内容(堆,bss,数据,文本,env)在线程之间共享。一个线程崩溃将导致整个进程崩溃,因此t1影响了程序中的t2。