- 处理管道上的B环氧树脂(EPOLLIN|EPOLLET(
- 进程A在管道中写入1KiB
- 进程B唤醒
- 进程B从管道中读取1KiB
- 进程A在管道中写入1KiB
- 处理管道上的B epolls
管道的状态在epoll过程中不会发生变化,但自上次读取后发生了变化。进程B会再次唤醒吗?
我对中常见问题解答(Q9(的理解http://linux.die.net/man/4/epoll您将在步骤6中获得另一个事件(假设您可以保证步骤5确实发生在步骤4之后,并且管道在步骤4后为空(。
话虽如此,你可能会得到比保证更多的事件(但你必须小心,只依赖于记录在案的行为(-请参阅http://cmeerw.org/blog/753.html#753和http://cmeerw.org/blog/750.html#750
虽然内核确实在步骤6中唤醒,但手册页面中并没有记录这一点。您提供的用例不符合EPOLLET
的使用方式。
根据文献,步骤6应该是";从FD"读取";。您唯一应该从FD轮询的时间是在您尝试读取并获得EAGAIN
之后。
另请参阅:EPOLLET的用例是什么?