2

ロックされたコードセクションで、通常はO(1)リスト要素へのアクセス/削除を伴うスピンロック ( pthreadのもの) を使用しています。

私が一般的に言うのは、99.9% のケースで、コードがリスト (1000 以上の要素を含む可能性がある) をループしないためです。コードは通常、リスト要素のヒントポインターに
基づいて 1 つの要素のみを抽出し、引用されたヒント要素を変更するためにいくつかのif分岐を実行します。それでも、メモリへの非連続アクセスである必要があります。

スピンロックを使用するのは良い考えですか、それともミューテックスに移行する必要がありますか?

私は最大のパフォーマンスを目指しています。このコンテキストでの CPU (オーバー) 使用は気にしません。

乾杯

4

2 に答える 2

0

pthreadミューテックススピンロックの実装を切り替えて、再現可能なテストケースでいくつかのベンチマークを行った後、ミューテックスが使用するCPUが少し少ない場合、スピンロックの実装はキューから要素を処理する速度が2倍になると言えます。

リストを処理する関数のO(1)の性質と、この (ほとんどの)定数時間がtinyであるという事実を考えると、正しい答えは、スピンロックの選択とミューテックスのどちらを優先するかだと思います。

したがって、最大のパフォーマンスを達成したい場合、CPU の無駄なサイクルを気にしない場合は、保護されたコードの実行時間が小さい(およびより一定である) 場合に備えて、ミューテックスよりもスピンロックの方が適しています。

于 2013-03-02T10:43:01.230 に答える