SHH*_*SHH 4 multithreading posix pthreads pthread-join
来自https://computing.llnl.gov/tutorials/pthreads/:
连接线程可以匹配一个pthread_join()调用.在同一个线程上尝试多个连接是一个逻辑错误.
也来自"man pthread_join":
如果多个线程同时尝试使用同一个线程进行连接,则结果是未定义的.
但是,从程序员的角度来看,多个线程可能希望等待单个线程完成(类似于障碍),这是完全合理的.
例如,我们可能有thread1,thread2独立运行,我们可能希望两个线程都等到thread3完成.
这个限制背后有任何技术原因吗?
我认为技术原因是pthread_join是一个POSIX标准,对于多线程,它试图只为实现者指定必要的原语.任何更丰富的语义都会引入更昂贵的实现,也许会带来更困难的API.
实际上,POSIX已经认为这个函数是一个方便的,而不是一个原始的,支持一个非常非常常见的用例:一个线程等待另一个线程的终止.
POSIX.1-2008 pthread_join RATIONALE的第一段有点冗长,但是有许多相关的观察:
的在pthread_join()函数是,在多线程应用程序已经证明是有用的便利.确实,如果没有通过将额外状态作为参数的一部分传递给start_routine()来提供程序员,则可以模拟此函数.终止线程将设置一个标志以指示终止并广播属于该状态的条件; 连接线程将等待该条件变量.虽然这种技术允许线程在更复杂的条件下等待(例如,等待多个线程终止),但是等待单个线程终止被认为是非常有用的.另外,包括pthread_join()函数绝不排除程序员编写这种复杂的等待.因此,虽然不是原始的,包括POSIX.1-2008的这个卷中的pthread_join()被认为是有价值的.
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |