悟空老师你好,有个问题想请问一下。
比如说现在主内存有变量x=0,首先线程1从主内存拷贝变量x=0到本地内存,然后执行x++,此时x=1,再同步回主内存。接着线程2开始了,从主内存中拷贝x=1到本地内存,然后也执行x++,此时x=2,再同步到主内存中。
由于上面的步骤,线程1和线程2都是第一次去访问变量x,所以自然都是先访问主内存,从主内存你中拷贝副本到本地内存中去操作变量。
当上面两个步骤做完之后,主内存x=2,线程1本地内存x=1,线程2本地内存x=2。此时线程1想再次访问变量x,将变量x的值加1。那么线程1是直接访问本地内存中x=1这个副本,还是说去访问主内存中x=2这个变量呢?
我的意思就是说当线程第一次访问某一个共享变量时,肯定都是先去从主内存中拷贝一份副本到自己的工作内存的。但如果是第二次或者第三次去访问这个变量时,这个线程如何决定是去访问主内存中的变量,还是访问自己本地内存中的变量呢?
因为缓存的出现就是为了让内存的读写速度能够尽量匹配上cpu的执行速度,所以访问变量时首选是从缓存中去读取。那么是不是有可能存在某种机制,比如说线程会先对比自己本地内存中的副本变量的值跟主内存中相应变量的值是否相同,如果相同,那我直接访问本地内存的变量,如果不相同,那我就把本地内存这个副本变量删掉,然后重新去主内存中拷贝一份来访问。
又或者是当一个线程修改了某个共享变量的值之后,在将这个变量同步回主内存的时候,会通知其他线程下次访问这个变量时记得去主内存中访问这种机制。
语言表达能力有点弱,希望能让老师看懂我的意思