[英]epoll - is EPOLLET prone to race conditions?
管道的狀態在 epoll 期間不會改變,但自上次讀取后發生了變化。 進程B會再次醒來嗎?
我從http://linux.die.net/man/4/epoll 中的 FAQ (Q9) 中的理解是,您將在第 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 的用例是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.