【发布时间】:2012-05-23 06:36:41
【问题描述】:
发件人: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() 使其“不可加入” - 它继续运行并且它的资源将在它退出时被释放(分离调用向系统表明在线程退出后不会使用这些资源),但没有线程可以加入不用了。【讨论】:
pthread_exit() 中的线程“返回”的值是保持连接的,并且必须有某种同步对象(类似于条件变量),当线程调用pthread_join() 以等待要退出的目标线程。
文学的意思是如果你有3个线程A,B,C和B加入A,那么C可以加入A如果B已取消。
取消加入线程不一定中止加入的线程。当一个线程被取消时,它可以在终止前进行清理,这包括取消其他线程。
【讨论】: