如果取消调用`pthread_join()`的线程,则目标线程将保持可连接状态

时间:2012-05-23 06:36:42

标签: multithreading pthreads

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

  

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

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

2 个答案:

答案 0 :(得分:2)

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

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

但是,如果一个线程调用pthread_join()(并且被阻止等待目标线程退出)并且被阻止的线程被取消,那么pthread_join()调用的目标基本没有任何反应(它继续)。文档澄清的是该线程仍然是“可连接的” - 这意味着:

  • 另一个主题可以调用pthread_join()等待它完成
  • 当线程完成并加入时系统可以释放的资源将被释放,除非另一个线程加入目标线程或者为目标线程调用pthread_detach()。为一个线程调用pthread_detach()使它“无法连接” - 它继续运行并且当它退出时它的资源将被释放(分离调用指示系统在线程退出后没有任何东西会使用这些资源),但没有线程可以再加入。

答案 1 :(得分:0)

声明文字的意思是,如果你有3个帖子ABCB加入A,那么{{1}如果C被取消,则可以加入A

取消连接线程并不一定会中止连接的线程。当线程被取消时,它可以在终止之前进行清理,这包括取消其他线程。