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