2015-10-20 33 views
3

我的程序中的流程调用pthread_join(thread_id, nullptr); 对于来自同一个调用线程的相同thread_id的2次。多次加入相同的pthread

第一次呼叫成功返回,但第二次只是无限期挂起。文档没有明确说明禁止多次调用pthread_join来获取同一个thread_id。情况确实如此吗?

我知道我可以使用pthread_cond_t来实现线程同步,但是我想首先理解pthread_join的限制。

+3

这没有意义:当加入的线程结束时,'pthread_join'返回。一个线程不能多于一次结束......另外:[手册页](http://linux.die.net/man/3/pthread_join)指出:*与之前已加入的线程结合导致未定义的行为* – Kninnug

+0

该文档明确指出“如果该线程已经终止,则pthread_join()立即返回”。 因此,如果程序的不同部分有兴趣检查他们的子进程是否结束,那么它是有意义的。 – Roman

+3

@罗曼:“已经结束但尚未加入”和“已加入”是完全不同的事情。 **任何**在'pthread_join'之后使用'pthread_t'都是非常危险的未定义行为(这是一种免费使用类型的bug)。 –

回答

3

看一看在documentation for pthread_join - 在注释部分则指出:

与先前已未定义行为的联合结果线程加入。

许多其他关于在链接中加入线程(以及其他方面,如果您搜索其他pthread函数)的好信息。

+0

谢谢!我不能相信我错过了那一行:( – Roman