内存一致性模型

内存一致性模型 wiki

http://preshing.com/20120913/acquire-and-release-semantics/

Weak vs. Strong Memory Models

那么为什么程序员需要关心SC呢

锁的本质

在现代多核多级缓存的处理器架构下,当一个cpu修改了其缓存的一个数据单元,主内存是如何感知,其他cpu又是如何感知的呢?

目标,cpu内存模型最主要分两种内存模型

强内存模型和弱内存模型,两者的主要区别在于是否允许cpu对主内存的修改即时可见,以及是否允许编译器内存访问指令重排序,目前大多cpu架构采 用弱模型,非即时可见,允许内存访问指令重排序。

如下图:

线程对共享变量的访问,并非直接访问共享内存,而是访问共享内存的一份copy,这份copy我们称它为工作内存(工作内存是概念上的区域,可以是寄存器上、cpu缓存、或者主内存,看具体的虚拟机实现及运行时优化)。

l working memory

线程访问实例变量、静态变量、数据对象元素(除局部变量和参数之外)都通过访问各自工作内存copy

线程的工作内存之间是不可见

线程之间变量的传递通过主内存

既然在多线程下的内存模型类似于cpu->cpu缓存->主内存的三级模型,那么同样也存在上面内存共享的问题。换句话说同样存在以下问题:

ü 一个线程在操作一个共享变量时,不受其它线程干扰(原子性)

ü 一个线程改变了一个共享变量,其它线程如何及时看到(可见性)

ü 如何保证多个线程有序地去操作共享变量(有序性)