如果一个线程(比如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
和epoll
用于相同的功能。但是,kqueue
没有单独的函数来声明对获取描述符事件反馈的兴趣。是否有人知道如何使用kqueue
以类似于epoll
的方式?如果它允许线程安全的“兴趣声明”,则epoll
似乎是目前最好的线程安全选项。
kqueue
时,您可以通过将nevents
参数传递为 0 来声明兴趣而不获取事件反馈。例如,请参见此答案。 - Tsyvarev