`pthread_join`可能失败/未调用并导致僵尸线程的情况

时间:2013-05-08 15:55:04

标签: c pthreads

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

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

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

4 个答案:

答案 0 :(得分:0)

我认为手册页意味着如果你的应用程序在终止之后没有加入一个可连接的线程,但只是忘记了它,那么终止的线程就变成了一个僵尸线程,并且僵尸很糟糕。

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

答案 1 :(得分: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。这个link也是

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

答案 2 :(得分:0)

避免创建“Zombie Thread” 你需要做这些事情:

  1. 不要使用分离的线程。
  2. 确保在线程例程中的right位置有cancel_point。
  3. 确保您的线程例程有退出代码。
  4. https://computing.llnl.gov/tutorials/pthreads/

答案 3 :(得分:0)

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

相关问题