据我所知 std::memory_order 枚举提供内存栅栏,但我需要确定每个 std::memory_order 枚举元素提供的栅栏。下面我解释一下,因为我了解每个 std::memory_order 枚举元素:
- std::memory_order_relaxed - 没有提供栅栏
- std::memory_order_acquire - LoadLoad_LoadStore
- std::memory_order_release - LoadStore_StoreStore
- std::memory_order_consume - 通常等于 memory_order_acquire
- std::memory_order_acq_rel - LoadLoadLoadStore_LoadStoreStoreStore ???
- std::memory_order_seq_cst - StoreLoad_StoreLoad ???
关于前 4 个元素,我不确定。但是关于最后两个元素,我什么都不知道。
任何人都知道吗?
另外,我需要知道在使用 std::atomic 或 std::atomic_flag 时编译器将内存栅栏放在哪个位置?
据我了解,使用原子栅栏意味着应用栅栏并执行操作。我对吗?例如:
atomic.load(std::memory_order_acquire);
意味着应用 memory_order_acquire 围栏并以原子方式加载数据?