【发布时间】:2020-09-29 09:02:14
【问题描述】:
我正在学习glibc(版本是2.32)。至于内存屏障,x86的读、写和全屏障如下:
#define atomic_full_barrier() \
__asm __volatile (LOCK_PREFIX "orl $0, (%%" SP_REG ")" ::: "memory")
#define atomic_read_barrier() __asm ("" ::: "memory")
#define atomic_write_barrier() __asm ("" ::: "memory")
如cppreference 和this answer 说,volatile
告诉编译器不要优化和重新排序这条指令。
为什么读写屏障不使用__asm __volatile,而完全屏障使用它?
【问题讨论】:
标签: c gcc glibc inline-assembly memory-barriers