1

マルチスレッド ネットワーク サーバー プログラムに問題があります。

新しいクライアント接続をリッスンしているメイン スレッドがあります。Linux epoll を使用して I/O イベント通知を取得しています。着信イベントごとに、accept() 新しい接続を作成し、それに fd を割り当てるスレッドを作成します。負荷が高い場合、同じ fd が 2 回割り当てられ、プログラムがクラッシュすることがあります。

私の質問は次のとおりです。システムは、別のスレッドでまだ使用されている fd をどのように再割り当てできますか?

ありがとう、

4

3 に答える 3

3

おそらくここには競合状態がありますが、コードを見ないと診断するのは困難です。

acceptメインスレッドで、受け入れたソケットを新しいスレッドに渡す方がよいでしょう。

リスニング ソケットを新しいスレッドに渡して受け入れを実行すると、競合状態になります。

詳細については、こちらをご覧ください: https://stackoverflow.com/a/4687952/516138

そして、これはネットワーク効率の良い背景です (少し時代遅れかもしれませんが)。

于 2013-06-12T09:27:39.677 に答える
0

呼び出しているのと同じスレッドで accept() を呼び出す必要がありますepoll()。そうしないと、競合状態が発生します。

于 2013-06-12T10:39:26.050 に答える