WarcraftHelper完整指南:如何让魔兽争霸3焕然一新的终极解决方案
2026/6/14 20:18:57
在原子操作中,有两个带有_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一致性就是为了适应这种行为而设计的,不过只有在确定原子读取之前的某些效果不会影响读取线程时才使用。