次のコードがあるとしましょう (おもちゃの例):
std::atomic<K *> data;
K *old_value = NULL;
K *new_value = new K();
if (!data.compare_exchange_strong(old_value, new_value, m1, m2)) {
delete new_value;
}
do_something(old_value);
または
std::atomic<K *> data;
K *i = data.load(m3);
K *j;
do {
j = i + 1;
} while (data.compare_exchange_weak(i, j, m4, m5);
do_something(j);
m1
、m2
、m3
、m4
の有効な値はm5
? std::memory_order_relaxed
私の読書は、コード全体が以前の操作の結果に強く依存するため、すべてが可能であるということです(do_something
ポインターを使用するだけで、グローバルな共有状態を変更しないと仮定します)。私の読みは正しいですか?