1

私のC++アプリケーションは、いくつかのソケットとそれらの送信+受信を管理します。問題を無視するために、ソケットで受信を送信する前にセマフォによるロックを行っています。100台のマシンでアプリケーションを実行すると、マシンが受信したメッセージに対してACKを送信しない期間が時々あることがわかります(wiresharkでパケットとこのパケットの再送信を確認します)。また、この期間に、アプリケーションが送信する必要があるものから何も送信していないことがわかります。

私の質問は次のとおりです。この問題は、ロック機構の根本的な原因によるものでしょうか? ロックメカニズム-ソケットをロックすると、OSもこのソケットで何も送信しなくなりますか? そして多分あなたも知っているでしょう:この振る舞いを無視する方法は?

ありがとう

4

1 に答える 1

1

ああ、これは良く聞こえません。アプリのデザイン、特に詳細を提供する必要があります。ロックに関するいくつかのコード。

通常、リソースのロックはミューテックスを使用して行われますが、プッシュ時に 1 に初期化されたセマフォで行うことができます。

最も重要なこと: ロック内のネットワーク呼び出しによってスローされたすべての例外を処理していますか?

于 2012-04-19T09:32:05.623 に答える