我只是想知道,如果我使用属性和"pthread_attr_setdetachstate"
带有参数的函数创建一个分离线程(POSIX) PTHREAD_CREATE_DETACHED
,我是否必须在程序结束时销毁线程?
我知道我必须销毁为创建分离线程而创建的属性,但对于线程本身,我真的不知道。
我只是想知道,如果我使用属性和"pthread_attr_setdetachstate"
带有参数的函数创建一个分离线程(POSIX) PTHREAD_CREATE_DETACHED
,我是否必须在程序结束时销毁线程?
我知道我必须销毁为创建分离线程而创建的属性,但对于线程本身,我真的不知道。
我认为您不应该破坏分离的线程。
将线程视为共享相同内存区域的进程。因此,当一个进程被分叉并且子进程在主进程之前完成时,子进程的返回值保存在内核内存中,可以被父进程占用。
分离线程只不过是向内核指示线程的返回或退出状态不是必需的,一旦线程完成就可以忽略。
因此,您不必在程序结束时等待分离线程完成,因为在大多数 POSIX 系统中,如果主线程完成,那么该进程的其他线程也会被系统停止,所以最好在退出主线程之前等待子线程完成。
据我了解:
如果你不想收集线程的退出状态,那么你可以使用PTHREAD_CREATE_DETACHED
. 所以内核会在线程结束后负责清理线程特定的资源。一旦你设置了分离状态。您无法恢复到可加入状态。
因此,您可以在程序中的任何位置销毁该属性。