个人感觉volatile的写语义是为了避免缓存回写带来的并发问题
但是读语义似乎是必须的,并不需要JMM去规定。
因为缓存一致性的存在,前一个volatile的写让其他核的缓存失效,这时读的话就必须去读主内存的
不知这么理解是否正确?
个人感觉volatile的写语义是为了避免缓存回写带来的并发问题
但是读语义似乎是必须的,并不需要JMM去规定。
因为缓存一致性的存在,前一个volatile的写让其他核的缓存失效,这时读的话就必须去读主内存的
不知这么理解是否正确?
volatile主要有两个作用:
1.实现可见性,修改volatile变量时会强制将修改后的值刷新的主内存中,会导致其他线程工作内存中对应的变量值失效.
2.使用内存屏障限制重排序。
4 回答1.4k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答737 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
是的.
volatile 修饰的的变量只会保存在内存中.每次读的话必须去内存中读取.