pthreads – 加入一组线程,等待一个退出

在POSIX线程接口中,可以使用pthread_join(thread)来阻塞,直到指定的线程退出。

是否有类似的函数允许执行阻止,直到任何子线程退出?

这与wait() UNIX系统调用类似,但适用于子线程,而不适用于进程

我认为这不是直接可以从pthreads本身,但你可以很容易地解决它。

使用pthreads API,您可以使用pthread_cond_wait和friends来设置“条件”并等待它。 线程即将退出时,通知该条件以唤醒等待线程。

或者,另一种方法是使用pipe创建pipe ,当线程要退出时, write管道。 让主线程在管道的另一端等待selectpollepoll或您最喜欢的变体。 (这也允许您在其他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()。