线程 - 它是一个静态持续时间对象吗?

时间:2016-12-30 12:47:35

标签: c++ multithreading

正如标题所说:std::thread是一个静态持续时间对象?或者即使我没有明确地访问静态变量,它是否会使用一些?

编辑:

n2440说(放弃程序):

  

破坏静态持续时间对象的主要问题是在执行析构函数后访问静态持续时间对象,从而导致未定义的行为。为防止出现此问题,N2382动态初始化和并发销毁要求所有用户线程在销毁开始之前完成(通过调用exit或从main返回)。

即使线程没有明确访问标记为static的任何变量,它也会成立吗?

1 个答案:

答案 0 :(得分:2)

std::thread是一个类,它没有任何存储持续时间。

std::thread的对象(或实例)可以具有任何存储持续时间(静态(全局),自动(在堆栈上),动态(在堆中))。

n2440(放弃进程)涉及在销毁全局对象后访问它们。当main返回时可能会发生这种情况,但仍有额外的线程在运行并访问全局对象(例如std::cout),这些对象现在正被主线程销毁。