我想知道,如果我使用属性和函数"pthread_attr_setdetachstate"
创建一个分离的线程(POSIX),并将参数设置为PTHREAD_CREATE_DETACHED
,那么我是否需要在程序结束时销毁该线程?
我知道我必须销毁创建分离线程所需的属性,但对于线程本身,我不是很清楚。
我想知道,如果我使用属性和函数"pthread_attr_setdetachstate"
创建一个分离的线程(POSIX),并将参数设置为PTHREAD_CREATE_DETACHED
,那么我是否需要在程序结束时销毁该线程?
我知道我必须销毁创建分离线程所需的属性,但对于线程本身,我不是很清楚。
我认为您不应该销毁已分离的线程。
将线程视为共享同一内存区域的进程。因此,当进程被fork并且子进程在主进程之前完成时,子进程的返回值存储在内核内存中,可以被父进程占用。
分离线程只是向内核指示,一旦线程完成,其返回或退出状态就不再需要,可以忽略。
因此,在程序结束时,您不必等待已分离的线程完成,因为在大多数POSIX系统中,如果主线程完成,则该进程的其他线程也会被系统停止,所以在从主线程退出之前等待子线程完成是个好主意。
PTHREAD_CREATE_DETACHED
。这样内核将负责在线程结束后清理线程特定资源。一旦设置了分离状态,就无法恢复到可连接状态。
pthread_join()
不会终止任何线程。它会阻塞(等待),直到“引用”的线程结束,然后告诉操作系统释放此已结束线程的资源。但是,这仅适用于可连接线程,即尚未分离的线程。 - alk