4

epollを使用したLinuxサーバープログラミングは初めてです。Thread_Accept と Thread_epoll の 2 つのスレッドがあります。前者はブロック受け入れループで、新しい接続が来ると、epoll_ctl() で新しい fd を追加します。後者は大きな epoll_wait() ループです。

ここで私の質問は次のとおりです。 Thread_epoll が epoll_wait の途中で epoll_ctl() を実行する Thread_Accept の場合はどうなりますか? 副作用はありますか?

前もって感謝します。

よろしく、マーティン

4

3 に答える 3

7

epoll_wait man ページから:

epoll_pwait() の呼び出しで 1 つのスレッドがブロックされている間に、別のスレッドが待機中の epoll インスタンスにファイル記述子を追加する可能性があります。新しいファイル記述子の準備が整うと、epoll_wait() 呼び出しのブロックが解除されます。

したがって、新しいファイル記述子を追加しても副作用はありません:-)

(この man ページのメモは、nathansizemore によって言及されたバグの結果です)

于 2016-10-11T14:00:58.777 に答える
0

1本の糸にしてみませんか?

リスナーソケットをノンブロッキングに設定し、ソケットを大きなepoll_waitに追加できます

于 2011-08-09T02:37:54.920 に答える
0

私の経験から、はい。しかし、これは別のことを言います

于 2015-11-24T05:29:38.393 に答える