内存模型(Memory Model) 描述多线程交互时如何精确的访问内存数据状态

序列一致性内存模型

Sequential Consistency Memory Model

内存独立于任何使用它们的进程/线程

内存通过内存控制器连接到每个线程,内存控制器反馈每个线程的读写请求

单线程的读写请求会精确的按照线程的指定次序到达内存

也可能会和其他线程的读写请求按照一个未指定的方式交错进行

不可能会有当Ri=1(Value已被初始化了)时,Rv=0(Value未初始化)的情况发生

req 1req 2req 3req 4RiRv
value=5inited=1Ri=initedRv=value15
value=5Ri=Initedinited=1Rv=value05
value=5Ri=InitedRv=valueinited=105
Ri=initedRv=valuevalue=5inited=100
Ri=initedvalue=5Rv=valueinited=105
Ri=initedvalue=5inited=1Rv=value05

实际 多CPU机器的内存系统

cpu到内存的写操作有缓冲区,以便cpu可以在数据刷到以及缓存前可以继续下一个指令。最终数据会到达内存,这样数据就可以被其他处理器共享

不再会有单一内存视图

一个处理器缓存的一个内存位置的值,同时其他处理器也缓存了相同内存位置的数据,但是这个数据可能是过期的老的数据。这就可能导致处理器的缓存内容不一致。