0

現在、複数のコンピューターで並列レンダリングを管理するアプリケーションをプログラミングしています。そのために、サーバー アプリケーションには、TCP 接続を管理するスレッドのプールがあり、質問ごとに 1 つのスレッドを使用しています。ネットワーク スレッドの 1 つがデータを受信した場合に他のスレッドに警告するために、すべての TCP スレッドで同じ条件変数を使用したいと考えています。

問題 : signalPOSIX API で関数を使用するには、ミューテックスを使用する必要があります。つまり、2 つのネットワーク スレッドが同時にデータを受信した場合、実行を継続するにはミューテックスが解放されるまで待機する必要があります。

現実的に、この条件変数を使用すると本当にコードが遅くなるでしょうか? また、使用したくない場合は、他のスレッド (wait条件変数を呼び出すスレッド) で、ループしてネットワーク スレッドが何かを受信したかどうかを確認する while 命令を作成することもできます。

どうもありがとう :)

4

1 に答える 1

0

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

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

于 2012-02-12T22:21:05.157 に答える