7

epoll(7) を使用するマルチスレッド Linux プログラムがあります。epoll(7) の man ページには、その fd の 1 つが閉じられると、この fd は epoll セットから自動的に削除されると書かれています。私の質問は、epoll セットが同期せずに別のスレッドで同時にポーリングされている間に、epoll セットの fd が 1 つのスレッドで閉じられた場合です。プログラムが壊れたり、カーネルがこのアクセスを自動的に同期したりしますか?

ありがとう

風水

4

1 に答える 1

7

epoll セット内の fds はカーネルによって維持されるため、安全です。カーネルが必要な同期を処理します。

とはいえ、fd が閉じられる直前に、fd 上のイベントが別のスレッドで発生する可能性は残ります。したがって、セット内に存在しないように見える fd からのイベントが発生する可能性があります。慎重に設計されたプログラムでは、これが問題になることはありません。

于 2011-05-17T05:29:10.547 に答える