【问题标题】:Does a detached thread terminate if its owning class destructs如果其拥有的类破坏,分离的线程是否终止
【发布时间】:2018-04-28 23:24:42
【问题描述】:

假设我有这样的课程

class foo
{
  void foo() 
  {
     std::thread t(std::bind(&foo::doSomething,this));
     t.detach();
  }

  void doSomething()
  {
     while(true)
     {
       //Does some stuff here
     }
  }
};

我的问题是在上述情况下,如果 foo 类破坏了分离的线程也会终止吗?从我目前的观察来看,它似乎确实退出了。另外我相信这是因为线程可以访问实例的成员变量,并且一旦调用析构函数,这些成员变量就不再存在,所以有意义断定线程也退出了。如果我的理解有误,请纠正我。另外,如果线程不访问成员变量,如果类破坏它仍然会退出吗?

【问题讨论】:

    标签: multithreading c++11


    【解决方案1】:

    不,它不一定会退出。如果它访问在 foo 被销毁之后启动它的 foo 的成员,则您有未定义的行为。这可能doSomething退出和线程自然停止的症状,或其他任何情况。

    【讨论】:

    • 如果它不访问任何成员变量怎么办?类被破坏后还会继续吗?
    • 是的。没有任何可怕的远距离动作可以阻止它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2020-01-25
    • 1970-01-01
    • 2014-10-30
    相关资源
    最近更新 更多