销毁一个分离线程(POSIX)

3

我想知道,如果我使用属性和函数"pthread_attr_setdetachstate"创建一个分离的线程(POSIX),并将参数设置为PTHREAD_CREATE_DETACHED,那么我是否需要在程序结束时销毁该线程?

我知道我必须销毁创建分离线程所需的属性,但对于线程本身,我不是很清楚。


2
你认为“销毁线程”是什么意思? - alk
你说得对,“destroy”不是最好的词来描述它,但我在想,由于普通线程是通过函数“pthread_join”终止的,也许分离线程需要另一个函数来正确地在程序结束时终止。 - Dust009
pthread_join() 不会终止任何线程。它会阻塞(等待),直到“引用”的线程结束,然后告诉操作系统释放此已结束线程的资源。但是,这仅适用于可连接线程,即尚未分离的线程。 - alk
2个回答

5

我认为您不应该销毁已分离的线程。

将线程视为共享同一内存区域的进程。因此,当进程被fork并且子进程在主进程之前完成时,子进程的返回值存储在内核内存中,可以被父进程占用。

分离线程只是向内核指示,一旦线程完成,其返回或退出状态就不再需要,可以忽略。

因此,在程序结束时,您不必等待已分离的线程完成,因为在大多数POSIX系统中,如果主线程完成,则该进程的其他线程也会被系统停止,所以在从主线程退出之前等待子线程完成是个好主意。


3
据我理解:
如果您不想收集线程的退出状态,那么可以使用 PTHREAD_CREATE_DETACHED。这样内核将负责在线程结束后清理线程特定资源。一旦设置了分离状态,就无法恢复到可连接状态。
因此,您可以在程序中的任何位置销毁属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接