什么意味着unix上的线程'分离'?

时间:2016-03-09 15:49:15

标签: c linux multithreading

在书中,有句子:

通过调用pthread_join(),我们会自动将我们加入的线程置于分离状态,以便可以恢复其资源。 如果该主题已处于分离状态,则pthread_join()可能会失败,返回EINVAL

什么意味着'脱离'在线程中?

1 个答案:

答案 0 :(得分:1)

每个线程拥有资源,这些资源是在创建线程时获得的。线程函数返回时需要释放资源(就像你需要释放动态分配的内存,或者关闭你打开的文件句柄)。

默认情况下,线程的创建者(=您)保留线程的所有权以及回收其资源的责任。你可以通过调用join来执行此操作,这将阻塞直到线程的函数返回,然后销毁线程资源。

或者,您可以将线程置于“分离”状态,在这种情况下您不再拥有它。线程现在“拥有自己”,并且一旦线程函数返回,线程就会自行销毁。您无法加入分离的线程,因此无法在线程完成时进行同步。 (你可以说这使得分离一个线程成为一个坏主意,因为这意味着你完全放弃了解程序的控制流程。)