我创建了一个非分离的线程,可以通过两种不同的方法停止。其中之一(stop()
)提供通过加入到生成的螺纹,而另一(stopAsync()
)只是将控制变量m_continue
为假,并且不等待所提到的线程完成同步接口。是否强制加入非分离线程?
void run()
{
while(m_continue)
{
// Do something
}
}
void start()
{
m_continue = true;
// Spawn a new thread for run()
}
void stop()
{
m_continue = false;
// Join to the spawned thread
}
void stopAsync()
{
m_continue = false;
}
在stopAsync()
情况下被调用,在run()
方法完成的,而循环,但没有一个人加入到该线程。这种情况是否有资源泄漏?加入非分离线程是否强制?
我无法从文档中弄清楚。 “注释”部分讲述了我无法理解的内容。
线程可以是可连接或脱离。如果一个线程可以连接,则另一个线程可以调用pthread_join(3)来等待线程终止并获取其退出状态。 仅当已终止的可连接线程已连接时,才将其最后一个资源释放回系统。当分离的线程终止时,其资源会自动释放回系统:无法与线程连接以获取其退出状态。使线程分离对于某些类型的守护程序线程很有用,这些守护程序线程的应用程序不需要关心退出状态。默认情况下,除非attr被设置为以分离状态创建线程(使用pthread_attr_setdetachstate(3)),否则将以可连接状态创建新线程。
https://linux.die.net/man/3/pthread_create
感谢您的提醒,'m_continue'是一个原子布尔值。 –