8

std::atomic<T>::compare_exchange_*期待値を値ではなく参照で取得する理由は何ですか?

4

2 に答える 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 に答える