销毁分离的线程(POSIX)

时间:2014-05-15 10:27:16

标签: c linux multithreading pthreads pthread-join

我只是想知道,如果我使用属性创建一个分离线程(POSIX),并使用参数"pthread_attr_setdetachstate"创建函数PTHREAD_CREATE_DETACHED,我是否必须在程序结束时销毁该线程?

我知道我必须销毁为创建分离线程而创建的属性,但对于线程本身,我真的不知道。

2 个答案:

答案 0 :(得分:3)

根据我的理解:

如果你不想收集线程的退出状态,那么你可以使用PTHREAD_CREATE_DETACHED。因此内核将在线程结束后清理线程的特定资源。一旦你设置了分离状态。你无法恢复到可加入状态。

所以你可以在程序的任何地方销毁属性。

答案 1 :(得分:2)

我认为你不应该破坏分离的线程。

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

分离线程只不过是对内核的指示,即线程的返回或退出状态不是必需的,并且一旦线程完成就可以忽略。

所以你不必等待分离的线程在程序的最后完成,因为在大多数POSIX系统中,如果主线程完成,那么该进程的其他线程也被系统停止,所以它是一个在退出main之前等待子线程完成的好主意。