2

std::atomic_compare_exchangeおよびそのすべての兄弟姉妹が、渡された期待値を更新するのはなぜですか?

ループで与えられた単純さ以外に理由があるかどうか疑問に思っています。たとえば、パフォーマンスを向上させるために1回の操作でそれを実行できる組み込み関数はありますか?

4

2 に答える 2

8

プロセッサは、操作の「比較」部分を実行するために、現在の値をロードする必要があります。比較が失敗した場合、呼び出し元は新しい値を知る必要があり、比較交換を再試行します (ほとんどの場合、ループで使用します)。したがって、値が返されなかった場合 (たとえば、参照によって渡される期待値を変更することによって)その場合、呼び出し元は別のアトミック ロードを実行して新しい値を取得する必要があります。プロセッサはすでに値をロードしているため、これは無駄です。極端なパフォーマンスが唯一の選択肢である場合にのみ、低レベルのアトミック操作をいじる必要があります。

于 2013-11-24T18:51:33.713 に答える
2

パフォーマンスを向上させるために1回の操作でそれを行うことができる組み込み関数はありますか

それは具体的に何をすることができますか?命令は比較を行うために現在の値をロードする必要があるため、現在の値を生成する不一致の場合、コストはかからず、有用であることがほとんど保証されています。

于 2013-11-24T18:50:48.020 に答える