零壹教育:跳出理论,重新理解数据结构选型
2026/6/26 5:39:11
在原子操作中,有两个带有_explicit形式的函数,它们有两个memory_order参数,可用于区分成功和失败情况的要求:
bool atomic_compare_exchange_strong_explicit(A volatile* obj, C *expe, C des, memory_order success, memory_order failure); bool atomic_compare_exchange_weak_explicit(A volatile* obj, C *expe, C des, memory_order success, memory_order failure);这里,成功时的一致性必须至少和失败时的一致性一样强。
通常我们默认同步的获取和释放是对称的,但实际上并非如此。因为通常只有一个写入者,但可能有多个读取者。将新数据移动到多个处理器或核心的成本较高,所以一些平台允许避免将原子操作之前的所有可见效果传播到所有读取新值的线程。C 语言的consume一致性就是为了适应这种行为而设计的。不过,只有在确定原子读取之前的某些效果不会影响读取线程时,才应该使用它。