std::atomic<T>::compare_exchange_*
期待値を値ではなく参照で取得する理由は何ですか?
質問する
1735 次
2 に答える
8
compare_exchange_*
expected
操作に失敗すると実際の値に変わります。ループが少し簡単になります。
于 2013-11-14T20:00:20.137 に答える
4
一般的な使用パターンは次のとおりです。
atomic<int> foo;
int expected = 3;
while(!foo.compare_exchange_strong(expected, 4)) {
// somebody beat us to it
// now decided what to do; break the loop? try again?
if (expected == 4) {
// somebody already wrote a 4 there
break;
} // otherwise keep trying
}
代わりにa を返すこともできpair<bool,T>
ますが、このユース ケースではあまり便利ではありません。別の引数で値を返すこともできexpected
ますが、再試行する前に手動でコピーする必要があります。
IMHOこれは良いトレードオフですが、最初の引数で定数を渡すことはできません(まれなユースケースであるため)。
于 2013-11-14T20:48:41.507 に答える