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

标签 c pthreads posix

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

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

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

最佳答案

我不认为 pthreads 本身可以直接实现这一点,但您可以很容易地解决它。

使用 pthreads API,您可以使用 pthread_cond_wait 和 friend 来设置“条件”并等待它。当线程即将退出时,发出条件信号以唤醒等待的线程。

或者,另一种方法是用pipe创建一个管道,当一个线程要退出时,write到管道。使用 selectpollepoll 或您最喜欢的变体让主线程在管道的另一端等待。 (这也允许您同时等待其他 FD。)

较新版本的 Linux 还包含用于执行相同操作的“eventfds”,请参阅 man eventfd,但请注意这是最近才添加的。请注意,这不是 POSIX,它仅适用于 Linux,并且只有在您相当最新的情况下才可用。 (2.6.22 或更高版本。)

我个人一直想知道为什么这个 API 不是设计来处理类似于文件描述符的这些东西。如果是我,它们将是“事件表”,您可以选择文件、线程、计时器...

关于c - pthreads - 加入一组线程,等待一个线程退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702807/

相关文章:

c - Clion 2016.2 EAP 中的调试器与以前不同

气隙 Linux 笔记本电脑上的 c 套接字神秘减速

c - 在pthread_cond_broadcast之后,哪个线程拥有关联的互斥锁?

c - 扩展正则表达式是否支持反向引用?

c - _GNU_SOURCE 宏和 epoll_wait 行为

c - 禁止 GCC 下的不兼容指针类型特定警告

c - 在循环内运行 fork 会产生意想不到的结果(测量进程切换时间)

c++ - 带参数的 Pthread 成员函数

c++ - 无法使用 C++ 中的列表创建生产者-消费者实例

c - 如何使用 pthreads 并行化 pi 的蒙特卡洛估计?