是否存在这样的情况:我们希望加载一个带有memory_order_acquire的原子,而没有对应于带有memory_order_release的同一原子的存储?
例如,如果我有这段代码:
std::atomic<uint64_t> state;
std::atomic<uint64_t> count;
// Thread 1
while (true)
{
  auto expected = state.load(memory_order_relaxed);
  auto desired = get_desired(expected);
  if (state.compare_exchange_weak(expected, desired, memory_order_relaxed, memory_order_relaxed) { <----- (A)
    count.fetch_add(1, memory_order_relaxed); <---- (B)
    break;
  }
}
// Thread 2
auto state = state.load(memory_order_acquire); <----- (C)
auto count = count.load(memory_order_relaxed); <----- (D)
线程2中的memory_order_acquire应该可以防止count的加载在state的加载之前移动,但由于我们在其他地方都使用memory_order_relaxed,我是否正确地说,线程2可能会看到更新后的count值,该值可能比state更新,即在看到来自(A)的compare_exchange的效果之前,先看到(B)的效果?
如果我希望(A)的效果在线程2加载到(C)中时始终可见,那么我会将(B)更改为memory_order_release,在(D)中使用memory_order_acquire,并颠倒(C)和(D)的顺序吗?