C++ std::thread 应在堆上或堆栈上创建
C++ std::thread should be created on heap or on stack
假设我有一个线程正在创建并在堆栈上分离,如下所示:
void foo()
{
while(true){};
}
void runThread()
{
std::thread t(foo);
t.detach();
}
int main()
{
runThread();
}
程序当然没有任何意义,但是我们分离并退出后会发生什么runThred
?它是在堆栈上分配的,所以基本上 t
将在我们退出 runThred
后被销毁,但是线程本身将继续 运行 而不管主线程,因为它是分离的。
在这样的例子中,最好的做法是在堆上创建它并保存一个指向它的指针,然后做任何事情(dcor)?
或者如果 t
变量被破坏了,我们应该只 "ignore" 它就没有任何意义?
std::thread
对象表示线程句柄,可以通过该句柄对其进行操作。但是一旦你调用 detach
对象和实际执行线程之间就没有联系了。
假设我有一个线程正在创建并在堆栈上分离,如下所示:
void foo()
{
while(true){};
}
void runThread()
{
std::thread t(foo);
t.detach();
}
int main()
{
runThread();
}
程序当然没有任何意义,但是我们分离并退出后会发生什么runThred
?它是在堆栈上分配的,所以基本上 t
将在我们退出 runThred
后被销毁,但是线程本身将继续 运行 而不管主线程,因为它是分离的。
在这样的例子中,最好的做法是在堆上创建它并保存一个指向它的指针,然后做任何事情(dcor)?
或者如果 t
变量被破坏了,我们应该只 "ignore" 它就没有任何意义?
std::thread
对象表示线程句柄,可以通过该句柄对其进行操作。但是一旦你调用 detach
对象和实际执行线程之间就没有联系了。