ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

volatile理解

2022-02-22 01:04:42  阅读:160  来源: 互联网

标签:缓存 理解 线程 内存 一致性 volatile CPU 高速缓存


https://www.cnblogs.com/dolphin0520/p/3920373.html

 

volatile有两层语义:

1.保证多线程对变量操作时的可见性,即一个线程对变量修改后,对其他线程立刻可见。

2.禁止指令重排序。

第一点,在计算机内存模型上存在数据缓存一致性的问题。因为在执行程序时所有的指令都是在CPU上面进行执行的,指令执行过程中又会涉及到数据的读和写,由于数据存储在内存中,而CPU执行又非常快,从内存读取数据和向内存写入数据对于CPU执行来说是非常慢的会降低效率,因此CPU里面就多了一个高速缓存,将内存的数据提前读取到高速缓存中,然后CPU通过高速缓存进行数据的读写计算。执行完后再将数据刷新到内存中。

比如,两个线程同时执行一个语句 i=i+1

初始时,两个线程分别读取i的值存入各自所在的CPU的高速缓存当中,然后线程1进行加1操作,然后把i的最新值1写入到内存。此时线程2的高速缓存当中i的值还是0,进行加1操作之后,i的值为1,然后线程2把i的值写入内存。

最终结果i的值是1,而不是2。这就是著名的缓存一致性问题。通常称这种被多个线程访问的变量为共享变量。

也就说,一个变量在多个缓存中,就可能造成缓存一致性问题。

为了解决缓存一致性问题。,通常来说有以下2种解决方法:

1)通过在总线加LOCK#锁的方式

 2)通过缓存一致性协议

 

标签:缓存,理解,线程,内存,一致性,volatile,CPU,高速缓存
来源: https://www.cnblogs.com/lppBlogg/p/15921326.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有