2

来自: http: //man7.org/linux/man-pages/man3/pthread_join.3.html

未能与可连接的线程(即未分离的线程)连接会产生“僵尸线程”。避免这样做,...

我怎样才能避免这样做?我不明白,因为当我尝试加入一个线程时,为什么我会故意要失败?

4

4 回答 4

0

我想手册页的意思是,如果您的应用程序在终止后没有加入可连接线程,只是忘记了它,那么终止的线程就会变成僵尸线程,僵尸是坏的。

也就是说,这里的失败意味着故意不执行

于 2013-05-08T16:01:52.670 回答
0

为避免创建“僵尸线程”,您需要执行以下操作:

  1. 不要使用分离的线程。
  2. 确保您在线程例程中的正确位置有 cancel_point。
  3. 确保您的线程例程具有退出代码。

https://computing.llnl.gov/tutorials/pthreads/

于 2013-05-08T16:49:50.097 回答
0
 Failure to join with a thread that is joinable (i.e., one that is not
 detached), produces a "zombie thread".  Avoid doing this 

它表明您应该确保处理所有可能导致pthread_join线程不被调用的情况。(并导致僵尸)

此外,它指出,

   There is no pthreads analog of waitpid(-1, &status, 0), that is,
   "join with any terminated thread".

请参阅此处的waitpid。还有这个链接

您没有任何功能,例如要检查的流程,因此最好pthread_join通过正确处理代码中的案例来避免错过调用。

于 2013-05-08T16:17:05.867 回答
0

避免僵尸的最简单方法是使用分离线程功能。pthread_detach(pthread_self())在线程入口点函数中调用,或者在thid = pthread_create(...); pthread_detach(thid)创建线程时调用。

于 2016-12-15T04:02:46.567 回答