应该在堆或堆栈上创建C ++ std :: thread

时间:2016-02-09 23:25:25

标签: c++ multithreading stack heap detach

假设我有一个正在堆栈上创建和分离的线程,如下所示:

void foo()
{
    while(true){};
}

void runThread()
{
    std::thread t(foo);
    t.detach();
}

int main()
{
    runThread();
}

该计划当然没有任何意义,但是在我们分离并退出runThred之后会发生什么?它被分配在堆栈上,所以在我们退出t之后基本上runThred将被销毁,但是线程本身将继续运行而不管主线程是否已经分离。

这样一个例子中的最佳做法是在堆上创建它并在之后保存指向它的指针(dcor)吗?

或者如果t变量被破坏并且我们应该“忽略”它,它意味着什么?

1 个答案:

答案 0 :(得分:4)

std::thread对象表示可以对其进行操作的线程的句柄。但是一旦你调用detach,对象和实际的执行线程之间就没有连接。