来自: http: //linux.die.net/man/3/pthread_join
如果调用 pthread_join() 的线程被取消,那么目标线程将保持可连接状态(即,它不会被分离)。
这是否意味着如果我们取消主线程调用,目标线程将不会中止pthread_join
?
来自: http: //linux.die.net/man/3/pthread_join
如果调用 pthread_join() 的线程被取消,那么目标线程将保持可连接状态(即,它不会被分离)。
这是否意味着如果我们取消主线程调用,目标线程将不会中止pthread_join
?
pthread_join()
首先不会“中止”目标线程,所以我不确定我是否完全理解这个问题。
基本上,如果一个线程(主线程或其他)调用pthread_join()
它要求阻塞,直到目标线程退出。在正常情况下,一旦目标线程退出,被调用的线程pthread_join()
将解除阻塞,并且与目标线程关联的任何资源都可以被系统释放。
但是,如果一个线程已经调用pthread_join()
(并且被阻塞等待目标线程退出)并且被阻塞的线程被取消,那么pthread_join()
调用的目标基本上不会发生任何事情(它继续)。文档要澄清的是,该线程仍然是“可连接的”——这意味着:
pthread_join()
以等待它完成pthread_detach()
调用。调用pthread_detach()
一个线程使其“不可加入” - 它继续运行并且它的资源将在它退出时被释放(分离调用向系统表明在线程退出后没有任何东西将使用这些资源),但没有线程可以加入它了。语句文学的意思是,如果你有 3 个线程A
,B
和joins C
,那么如果被取消就可以加入。B
A
C
A
B
取消加入线程不一定中止加入的线程。当一个线程被取消时,它可以在终止前进行清理,这包括取消其他线程。