关于并发可见性的一点理解
2017-11-12 21:07
344 查看
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/05/5e7c290d9f119d53ae2ad49cb3e92581.png)
在看 《深入理解计算机系统》(CSAPP)第6章存储器层次结构 的时候突然想到在java并发编程 中的 可见性的问题,在这里简单记录一下,也不一定正确 ^_^
我们从上面的图中可以看到Intel Core i7 中有4核,每一个核心中都有独立的L1 L2 高速缓存, 四个核心共享L3高速缓存。
假设L1 L2高速缓存在数据写的时候采用的是写回的策略,简单来说就是仅仅更新高速缓存中的数据,这有在根据替换策略这条数据将要被新数据替换的时候才写回到更低层次的存储器中。
那么现在有这样的场景: 每一核中都运行着一个线程,而这些线程共享同一变量a,如果线程0(运行在核0)对变量a执行写操作,那么从图中我们可以看到仅仅会更改核0中的L1高速缓存,另外三个核上运行的线程在写回操作(准确的说是 核0需要至少写回到L3,而另外三个核重新从L3读)前是不会看到这次写操作的,这就是并发编程中的写可见性问题。
以上这是暂时的理解,留作记录以后补充。
相关文章推荐
- 关于并行、并发与多线程的一点理解
- 关于并行、并发与多线程的一点理解
- 关于BAYES判别的一点理解
- 关于GCD中同步函数+主队列产生死锁的一点理解
- 关于ThreadLocal的一点理解
- 关于皮尔逊相关系数(Pearson Correlation Coefficient)的一点理解
- 关于端口(port)的一点理解
- Java 中关于常量池与缓存类的一点理解
- 关于DataRow和DataColumn的一点个人简单理解
- 关于java中的protected一点理解
- 关于进程的一点理解
- 关于引用对象的使用的一点小理解
- 关于多重继承构造函数调用的一点理解与实践
- 关于C#中Thread.Join()的一点理解
- 关于修改 commit_write 提升性能的一点理解
- 关于php 高并发解决的一点思路
- 关于java中String的一点理解
- 我的一点浅见——关于机器的理解
- 关于C#里面socket编程的一点理解
- 关于文本与图片对齐的一点理解