在POSIX线程接口(interface)中,pthread_join(thread)
可以用来阻塞,直到指定的线程退出。
是否有类似的函数允许执行阻塞直到任何子线程退出?
这类似于 wait()
UNIX 系统调用,除了适用于子线程,而不是进程
最佳答案
我不认为 pthreads 本身可以直接实现这一点,但您可以很容易地解决它。
使用 pthreads API,您可以使用 pthread_cond_wait
和 friend 来设置“条件”并等待它。当线程即将退出时,发出条件信号以唤醒等待的线程。
或者,另一种方法是用pipe
创建一个管道,当一个线程要退出时,write
到管道。使用 select
、poll
、epoll
或您最喜欢的变体让主线程在管道的另一端等待。 (这也允许您同时等待其他 FD。)
较新版本的 Linux 还包含用于执行相同操作的“eventfds”,请参阅 man eventfd
,但请注意这是最近才添加的。请注意,这不是 POSIX,它仅适用于 Linux,并且只有在您相当最新的情况下才可用。 (2.6.22 或更高版本。)
我个人一直想知道为什么这个 API 不是设计来处理类似于文件描述符的这些东西。如果是我,它们将是“事件表”,您可以选择
文件、线程、计时器...
关于c - pthreads - 加入一组线程,等待一个线程退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702807/