Bob*_*r02 4 java multithreading locking volatile memory-model
在以下简单场景中:
class A {
int x;
Object lock;
...
public void method(){
synchronized(lock){
// modify/read x and act upon its value
}
}
}
Run Code Online (Sandbox Code Playgroud)
x需要变化吗?我知道同步保证原子性,但我不确定可见性虽然...确实锁定 - >修改 - >解锁 - >锁定保证,在第二次锁定后,x的值将是"新鲜"?
不,它没有,synchronized已经在它之后插入了一个内存屏障,所以所有线程都将看到当前线程执行的更新,同时考虑到其他线程将在同一个锁上同步.
易失性,就像synchronized一样,它有附加的内存屏障 - 取决于它是存储/加载/完全屏障的cpu,确保一个线程的更新对其他线程可见.我假设这是使用cpu cache invalidation执行的.
编辑 从我刚刚阅读的内容来看,存储缓冲区被刷新到CPU缓存,这就是实现可见性的方式.
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |