内存排序是指CPU访问主存时的顺序。可以是编译器在编译时产生,也可以是CPU在运行时产生。反映了内存操作重排序,乱序执行,从而充分利用不同内存的总线带宽。
现代处理器大都是乱序执行。因此需要内存屏障以确保多线程的同步。
这些内存屏障阻止编译器在编译时乱序指令,但在运行时无效。
asm volatile("" ::: "memory");
或者
__asm__ __volatile__ ("" ::: "memory");
阻止GCC编译器跨越它乱序读/写指令。
atomic_signal_fence(memory_order_acq_rel);
阻止编译器跨越它乱序读/写指令。
__memory_barrier()
指令。
_ReadWriteBarrier()
运行时内存排序
- happens-before:按照程序的代码序执行
- synchronized-with:不同线程间,对于同一个原子操作,需要同步关系,store()操作一定要先于 load(),也就是说 对于一个原子变量x,先写x,然后读x是一个同步的操作
对称多处理器(SMP)系统
对称多处理器(SMP)系统有多个内存一致模型。
某些老的x86有更弱内存序。
SPARC 内存序:
lfence (asm), void _mm_lfence(void)sfence (asm), void _mm_sfence(void)mfence (asm), void _mm_mfence(void)
- PowerPC
sync (asm)
- MIPS
sync (asm)
- Itanium
mf (asm)
- POWER
dcs (asm)
- ARMv7
dmb (asm)dsb (asm)isb (asm)
编译器对硬件内存屏障的支持
- GCC, version 4.4.0 and later, has
__sync_synchronize
. - C11/C++11
atomic_thread_fence()
支持一条命令 - Microsoft Visual C++ has
MemoryBarrier()
. - Sun Studio Compiler Suite has
__machine_r_barrier
,__machine_w_barrier
and__machine_rw_barrier
.
参见
- 内存模型 (程序设计)(英语:Memory model (programming))
参考文献
- ^ GCC compiler-gcc.h. . (原始内容存档于2011-07-24).
- ^ 存档副本. . (原始内容存档于2020-08-10).
- ^ ECC compiler-intel.h. . (原始内容存档于2011-07-24).
- ^ Intel(R) C++ Compiler Intrinsics Reference (页面存档备份,存于互联网档案馆)
Creates a barrier across which the compiler will not schedule any data access instruction. The compiler may allocate local data in registers across a memory barrier, but not global data.
相关
- 10的百科知识|10的意思解释|10是什么意思国际疾病伤害及死因分类标准第十版(英语:The International Statistical Classification of Diseases and Related Health Problems 10th Revision,ICD-10)是世界卫生组织依据疾
- 拟病毒拟病毒(Virusoid)也称为类病毒,它是一种环状单链RNA。它的侵染对象是植物病毒。被侵染的植物病毒被称为辅助病毒,拟病毒必须通过辅助病毒才能复制。单独的辅助病毒或拟病毒都不
- 霜冻酸奶冻酸奶是用酸奶,有时候用其他乳制品制成的冷冻甜点。它通常比冰淇淋酸,脂肪也比较少 (因为使用的是牛奶而不是奶油)。它跟牛奶冻 (近几年被称之为低脂肪或轻冰淇淋)和常见的霜淇淋
- 亚历克斯·弗格森亚历克斯·查普曼·弗格森爵士,CBE(英语:Alexander Chapman Ferguson,1941年12月31日-),苏格兰已退役足球运动员及主教练,在1986至2013年间担任英格兰豪门曼联主教练一职,被不少媒体
- 锯齿龙类锯齿龙科(学名:Pareiasauridae)又译颊龙,是一类副爬行动物,繁盛于二叠纪中期至晚期,是晚古生代非常特别的植食性副爬行动物。这些动物的体型矮胖,中型到大型(身长60cm到3m长),有非常大
- 德属新几内亚德属新几内亚﹝德语:Deutsch-Neuguinea﹞,是德意志帝国在大洋洲的一块殖民地。其范围包含新几内亚的北半部以及附近的一些岛屿。现在全境属于巴布亚新几内亚。此地主要由新几内亚
- 进程控制块进程控制块(英语:Process Control Block,PCB)是操作系统核心中一种数据结构,主要表示行程状态。虽各实际情况不尽相同,PCB通常记载行程之相关信息,包括:总言之,PCB如其名,内容不脱离各
- 向涛 (1963年)向涛(1963年4月12日-),男,湖北兴山人,中国凝聚态物理学家。现任中国科学院物理研究所研究员。1984年毕业于清华大学物理系,1986年获该校硕士学位,1990年获中国科学院理论物理研究所
- 收容遣送收容遣送(简称收遣,1949年—2003年7月31日)制度是中华人民共和国的一个已被废止的制度,其并非依据法律条例,而是依据中华人民共和国国务院相关法规的一种强制行政措施,由民政机关
- 瓦尔格兰德山坐标:46°13′34″N 8°08′20″E / 46.22611°N 8.13889°E / 46.22611; 8.13889瓦尔格兰德山(Punta Valgrande)是欧洲的山峰,位于瑞士和意大利接壤的边境,由皮埃蒙特大区和瓦莱