簡體   English   中英

epoll - EPOLLET 容易出現競爭條件嗎?

[英]epoll - is EPOLLET prone to race conditions?

  1. 進程 B 在管道上進行 epoll (EPOLLIN|EPOLLET)。
  2. 進程 A 在管道中寫入 1KiB。
  3. 進程 B 喚醒。
  4. 進程 B 從管道中讀取 1KiB。
  5. 進程 A 在管道中寫入 1KiB。
  6. 進程 B 在管道上進行 epoll。

管道的狀態在 epoll 期間不會改變,但自上次讀取后發生了變化。 進程B會再次醒來嗎?

我從http://linux.die.net/man/4/epoll 中的 FAQ (Q9) 中的理解是,您將在第 6 步中獲得另一個事件(假設您可以保證第 5 步確實發生在第 4 步之后,並且步驟 4) 后管道為空。

話雖如此,你可能會得到比保證更多的事件(但你必須小心,只依賴於記錄的行為) - 見http://cmeerw.org/blog/753.html#753http://cmeerw.org /blog/750.html#750

雖然內核在第 6 步喚醒是正確的,但這不是手冊頁中記錄的內容。 您提供的用例不符合EPOLLET使用方式。

根據文檔,第 6 步應該是“從 FD 讀取”。 您應該從 FD 進行輪詢的唯一時間是在您嘗試閱讀並獲得EAGAIN

另請參閱: EPOLLET 的用例是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM