0

私は現在、複数のコンピュータで並列レンダリングを管理するアプリケーションをプログラミングしています。そのために、私は自分のサーバーアプリケーション上に、すべての質問に対して1つのスレッドであるTCP接続を管理するスレッドのプールを持っています。私は、ネットワークスレッドの1つがデータを受け取った場合、他のスレッドに警告するために、すべてのTCPスレッドで同じ条件変数を使用したいと思います。条件変数(POSIX並行API)を使用すると、実際には並列ネットワークコードが遅くなる可能性がありますか?

問題:POSIX APIでsignal関数を使用するには、ミューテックスを使用する必要があります。これは、2つのネットワークスレッドが同時にデータを受信した場合、ミューテックスが実行を続けるために自由になるのを待たなければならないことを意味します。

現実的には、この条件変数を使用するとコードが実際に減速しますか?また、私はそれを使用したくない場合は、他のスレッド(条件変数にwaitを呼び出したスレッド)を作成して、ループして自分のネットワークスレッドが何かを受け取ったかどうかを調べることができます。

ありがとうございます:)

答えて

0

おそらくありません。ミューテックスをロックして条件変数を通知するだけであれば、ミューテックスで保護された作業キュー内の次のアイテムを取得するよりも悪くありません。

理論的には、条件変数の待機をフラグをポーリングするwhileループに置き換えることはできますが、このフラグにアクセスする際には適切な同期(メモリバリア)を使用する必要があります。これはコストもかかります。ビジーウェイトも様々な理由で理想的ではなく、スリープを追加すると遅延が発生します。

関連する問題