1

1Readerスレッド/1Writerスレッド設定で標準リングバッファの実装を使用しています。

リーダーはバッファーが空のときにループし[ライターはバッファーがいっぱいになるとループします]、制御変数を継続的にポーリングするため、pthread_yield(私の場合はsched_yieldのラッパーのみ)を呼び出して、システム内の他のスレッドを優先します。正しく機能するために必要ではないため、ミューテックスは使用していません。

ポーリングの影響(別名CPU書き込み)を軽減するためのより良い方法はありますか?私はpthreadの条件変数について考えていましたが、データがない[スペースがない]場合はほとんどスレッドをブロックするためですが、オーバーヘッドが発生する可能性があるのではないかと心配しています。

ありがとう

4

1 に答える 1

4

条件変数を使用すると、オーバーヘッドはビジーウェイトよりもはるかに低くなります。ミューテックスを正しく使用すると、データが期待どおりに実際に存在することが保証されます(順序付けが強制されるため)。

さらに、一般的なケースでミューテックスが本当に必要ない場合は、ロックの競合を低くするか、存在しないようにする必要があります。

于 2012-05-21T16:54:47.180 に答える