【发布时间】:2015-12-16 01:50:17
【问题描述】:
来自https://computing.llnl.gov/tutorials/pthreads/:
一个加入线程可以匹配一个 pthread_join() 调用。在同一个线程上尝试多个连接是一个逻辑错误。
也来自“man pthread_join”:
如果多个线程同时尝试加入同一个线程,结果是不确定的。
但是,从程序员的角度来看,多个线程可能希望等待单个线程完成(类似于屏障)是完全合理的。
例如,我们可能有 thread1、thread2 独立运行,我们可能希望两个线程都等到 thread3 完成。
这个限制背后有什么技术原因吗?
【问题讨论】:
-
一旦
pthread_join()返回,与退出线程关联的最后一个资源将被释放。没有其他pthread_join()可以触及该线程,因为它什么都没有留下。必须这样,否则 pthread-library 怎么知道何时释放这些资源?如果多个线程可以与一个 pthread 连接,那么每个退出的线程都会有永久的资源泄漏。 -
那么,终止线程的资源(返回值)会一直保存在内存中,直到 FIRST 线程实际加入并声明它?就像先到先得一样?
-
不完全。它是“先到先得,如果其他人后来来了,那就得付钱了”。
-
我可以说原因是什么,但它们可能是令人不快的解决方法,例如 pthread_detach 并且可能会找到一些析构函数或释放的锁以供选择。
标签: multithreading pthreads posix pthread-join