2

来自: http: //linux.die.net/man/3/pthread_join

如果调用 pthread_join() 的线程被取消,那么目标线程将保持可连接状态(即,它不会被分离)。

这是否意味着如果我们取消主线程调用,目标线程将不会中止pthread_join

4

2 回答 2

2

pthread_join()首先不会“中止”目标线程,所以我不确定我是否完全理解这个问题。

基本上,如果一个线程(主线程或其他)调用pthread_join()它要求阻塞,直到目标线程退出。在正常情况下,一旦目标线程退出,被调用的线程pthread_join()将解除阻塞,并且与目标线程关联的任何资源都可以被系统释放。

但是,如果一个线程已经调用pthread_join()(并且被阻塞等待目标线程退出)并且被阻塞的线程被取消,那么pthread_join()调用的目标基本上不会发生任何事情(它继续)。文档要澄清的是,该线程仍然是“可连接的”——这意味着:

  • 另一个线程可以调用pthread_join()以等待它完成
  • 当一个线程完成并加入时,系统可以释放的资源不会被释放,除非另一个线程加入目标线程或被目标线程pthread_detach()调用。调用pthread_detach()一个线程使其“不可加入” - 它继续运行并且它的资源将在它退出时被释放(分离调用向系统表明在线程退出后没有任何东西将使用这些资源),但没有线程可以加入它了。
于 2012-05-23T07:17:15.957 回答
0

语句文学的意思是,如果你有 3 个线程A,B和joins C,那么如果被取消就可以加入。BACAB

取消加入线程不一定中止加入的线程。当一个线程被取消时,它可以在终止前进行清理,这包括取消其他线程。

于 2012-05-23T07:16:02.983 回答