如果一个线程(比如 X)正在等待epoll_wait()
另一个线程(比如 Y)调用epoll_ctl()
以注册对文件描述符的兴趣9
。之前在线程 X 中的调用能否epoll_wait()
返回线程 Y 添加的文件描述符9
?初始调用epoll_wait()
在任何时候都不会在中间返回。
现在我想对此进行比较,并就操作系统中的另外两个轮询调用提出相关问题。poll()
和kqueue
- 如果上述问题的答案是正确的,那么有没有办法通过
poll()
系统调用实现类似的行为? - 让我们假设它
epoll_ctl()
是线程安全的,线程 X 可以安全地调用epoll_ctl()
并通过调用epoll_wait()
返回文件描述符9
是否准备好进行 I/O。声明对文件描述符感兴趣的函数和等待函数的分离是使这个函数令人惊叹的原因。但是人们经常将kqueue
andepoll
称为用于相同的功能。但是kqueue
,没有单独的函数来声明对获取描述符的事件反馈感兴趣。有谁知道如何kqueue
以类似的方式使用epoll
?epoll
如果它允许线程安全“利益声明”,它似乎是目前最好的线程安全选项