pthreads – 加入一组线程,等待一个退出
在POSIX线程接口中,可以使用pthread_join(thread)
来阻塞,直到指定的线程退出。
是否有类似的函数允许执行阻止,直到任何子线程退出?
这与wait()
UNIX系统调用类似,但适用于子线程,而不适用于进程
我认为这不是直接可以从pthreads本身,但你可以很容易地解决它。
使用pthreads API,您可以使用pthread_cond_wait
和friends来设置“条件”并等待它。 线程即将退出时,通知该条件以唤醒等待线程。
或者,另一种方法是使用pipe
创建pipe
,当线程要退出时, write
管道。 让主线程在管道的另一端等待select
, poll
, epoll
或您最喜欢的变体。 (这也允许您在其他FD上同时等待。)
较新版本的Linux还包含用于执行相同操作的“eventfds”,请参阅man eventfd
,但请注意,这只是最近才添加的。 请注意,它不是POSIX,它只是Linux版本,只有在您是合理的最新版本时才可用。 (2.6.22或更高。)
我个人总是想知道为什么这个API不是为了处理类似于文件描述符的东西而设计的。 如果是我,他们将成为“事件”,你可以select
文件,线程,计时器……
我不认为POSIX线程接口中有任何函数可以执行此操作。
您需要创建自己的版本 – 例如,由互斥锁和条件变量保护的标志数组(每个线程一个标志); 就在“pthread_exit()”之前,每个线程获取互斥锁,设置其标志,然后执行“pthread_cond_signal()”。 主线程等待信号,然后检查标志数组以确定要连接的线程(当时可能有多个线程要加入)。
您需要通过pthread条件变量实现自定义:pthread_cond_wait(),pthread_cond_signal()/ pthread_cond_broadcast()。