41.2 内存模型
C++实现大多以标准库组件的形式提供对并发机制的支持。这些组件依赖于一组称为内存模型(memory model)的语言保证。内存模型是计算机设计师和编译器实现者之间关于计算机硬件最佳表示方式的讨论结果。如ISO C++标准库所指出,内存模型描述了编译器实现者与程序员之间的约定,确保大多数程序员不必考虑现代计算机硬件的细节。
为了理解所涉及的问题,请记住一个简单事实:对内存中对象的操作永远不直接处理内存中的对象,而是将对象加载到处理器的寄存器中,在那里修改它,然后再写回内存。更糟的是,对象通常首先从主存加载到缓存中,然后再加载到寄存器。例如,考虑递增一个简单的整数x:
内存可被多个线程共享,而缓存也可(依赖于机器体系结构)被运行于相同或不同“处理单元”(通常被称为处理器(processor)、核心(core)或超线程(hyper-thread);这是一个系统特性和术语都快速演变的领域)的线程所共享。这导致简单操作(如“将x加1”)都有很大可能崩溃。这里的描述已是经我简化了的,计算机体系结构专家很容易发现这一点。有些人可能注意到我没有提及存储缓冲,我推荐参考[McKenney,2012]的附录C。
41.2.1 内存位置
考虑两个全局变量b和c:
现在,如大家所期望,x==1且y==1。为什么这也值得一提?考虑如果链接器将b和c分配到相同的内存字且机器存取的最小单位是字(大多数现代硬件都是如此),将会发生什么: ...
Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.