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/4577471/

相关文章:

c - Oracle 的 pro*C 编译器和 gnu C(__builtin_va_list、__attribute__ 等)

c - C 语言上的二叉树实现

c - C 中 strcpy() 的段错误(核心转储)错误

c - 生产者-消费者队列中出现奇怪的死锁

c++ - 更改线程的并发级别有什么作用?

c - union 内部的 2 个结构,来自头文件

C++ - 线程和多队列

c - 时间片是如何在进程中的 pthreads 之间划分的?

这个函数可以兼容两个版本的 POSIX 吗?

client-server - 为什么某些 posix 共享内存段和 posix 信号量对 ipc 不可见