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

序列一致性内存模型

Sequential Consistency Memory Model

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

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

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

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

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

req 1 req 2 req 3 req 4 Ri Rv
value=5 inited=1 Ri=inited Rv=value 1 5
value=5 Ri=Inited inited=1 Rv=value 0 5
value=5 Ri=Inited Rv=value inited=1 0 5
Ri=inited Rv=value value=5 inited=1 0 0
Ri=inited value=5 Rv=value inited=1 0 5
Ri=inited value=5 inited=1 Rv=value 0 5

实际 多CPU机器的内存系统

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

不再会有单一内存视图

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