假设我有以下代码(玩具示例):
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
只使用指针而不改变全局共享状态)。我的阅读正确吗?