在 POSIX 线程接口中,可以使用
是否有类似的功能可以让执行阻塞,直到任何子线程退出?
这类似于
pthread_join(thread)
来阻塞,直到指定线程退出。是否有类似的功能可以让执行阻塞,直到任何子线程退出?
这类似于
wait()
UNIX 系统调用,但适用于子线程而不是进程。我认为从pthread本身来说,直接实现这一点是不可能的,但你可以相当容易地解决它。
使用pthread API,您可以使用pthread_cond_wait
等方法设置一个“条件”并等待它。当线程即将退出时,发出信号以唤醒等待的线程。
另一种方法是使用pipe
创建管道,并在线程即将退出时使用write
写入管道。主线程在管道的另一端等待,可以使用select
、poll
、epoll
或您喜欢的其他变体进行等待。(这还允许您同时等待其他FD。)
较新的Linux版本还包括“eventfd”,用于执行相同的操作,请参见man eventfd
,但请注意,这只是最近添加的功能。请注意,这不是POSIX,仅适用于Linux,并且仅在您的系统版本较新(2.6.22或更高版本)时才可用。
我个人一直想知道为什么此API没有被设计为类似于文件描述符。如果由我来设计,它们将是“eventables”,您可以使用select
选择文件、线程、定时器等。
WaitOnSingleObject
或 WaitOnMultipleObjects
。 - Daniel Kamil Kozar您需要通过pthread条件变量来实现自定义变量:pthread_cond_wait(),pthread_cond_signal()/pthread_cond_broadcast()。