我有一些在跨平台的shared_mutex-implementation中使用__sync_val_compare_and_swap的代码。 Windows版本(#ifdef'd)使用_InterlockedCompareExchange-intrinsic,它具有完整的物理(对CPU进行加载和存储的排序)和逻辑(对编译器而言)获取和释放行为。我找不到任何文档,说明__sync_val_compare_and_swap-intrinsic对加载和存储到编译器的顺序也有一些逻辑影响。那么,是否有任何“内在因素”迫使编译器具有逻辑的获取或释放障碍?我知道gcc中有asm volatile("" ::: "memory");
,但是它也具有获取和释放行为。