cpp简单的线程程序在退出时崩溃

时间:2017-02-11 17:53:27

标签: c++ multithreading

我正在尝试了解如何使用线程,这个简单的代码崩溃了这个错误: enter image description here

代码:

#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void thread1()
{
    while (true)
    {
        cout << this_thread::get_id() << endl;
    }
}

void main()
{
    thread t1(thread1);
    thread t2(thread1);

    this_thread::sleep_for(chrono::seconds(1));

    t1.detach();
    t2.detach();
}

有人可以解释为什么它在分离后崩溃以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

出现错误的原因是在取消初始化后访问CRT(C ++运行时库)。

工作线程通过访问std::cout来使用CRT。当主线程离开main函数时,CRT库正在卸载,但工作线程仍在尝试使用它。可能会有运行时检查,因此您会收到错误消息,而不仅仅是程序崩溃。

最好不要使用detach方法,并确保您生成的所有线程都在程序退出时完成执行。