【问题标题】:cpp simple thread program crashes at exit [duplicate]cpp简单线程程序在退出时崩溃[重复]
【发布时间】:2017-06-29 23:19:13
【问题描述】:

我正在尝试了解如何使用线程,而这个简单的代码会因以下错误而崩溃:

代码:

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

谁能解释一下为什么它在分离后崩溃以及如何解决这个问题?

【问题讨论】:

  • std::thread::detach() 通常是个坏主意。
  • 但我别无选择
  • 非正式地,当您的程序退出时,操作系统应回收所有(非共享)资源。但是在这种情况下,仍然有一些正在运行的线程,这让操作系统很生气。
  • 我想最终写一个多线程服务器,所以我必须学习如何使用这些命令
  • 那么我该如何关闭它们呢?

标签: c++ multithreading


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多