来自:http://linux.die.net/man/3/pthread_join
如果取消调用pthread_join()的线程,则目标线程将保持可连接状态(即,它不会被分离)。
这是否意味着如果我们取消调用pthread_join
的主线程,目标线程将不会被中止?
答案 0 :(得分:2)
pthread_join()
首先没有“中止”目标线程,所以我不确定我是否完全理解这个问题。
基本上,如果一个线程(主线程或其他)调用pthread_join()
,则要求阻塞直到目标线程退出。在正常情况下,一旦目标线程退出,调用pthread_join()
的线程将解除阻塞,并且系统可以释放与目标线程关联的任何资源。
但是,如果一个线程调用pthread_join()
(并且被阻止等待目标线程退出)并且被阻止的线程被取消,那么pthread_join()
调用的目标基本没有任何反应(它继续)。文档澄清的是该线程仍然是“可连接的” - 这意味着:
pthread_join()
等待它完成pthread_detach()
。为一个线程调用pthread_detach()
使它“无法连接” - 它继续运行并且当它退出时它的资源将被释放(分离调用指示系统在线程退出后没有任何东西会使用这些资源),但没有线程可以再加入。答案 1 :(得分:0)
声明文字的意思是,如果你有3个帖子A
,B
,C
和B
加入A
,那么{{1}如果C
被取消,则可以加入A
。
取消连接线程并不一定会中止连接的线程。当线程被取消时,它可以在终止之前进行清理,这包括取消其他线程。