Condition在使用 a提供的 a时,我有一个关于内存屏障的问题Lock。
关于javadoc forCondition中提供的示例,我有一个关于使用的问题:
int putptr, takeptr, count;
这些属性不应该被声明为 volatile 吗?正如我从示例中所理解的那样,线程可能看不到例如count.
或者,当signal()被调用时,自获得锁以来所做的所有修改对其他线程都是可见的?很像一个synchronized块中的一些代码?
如果是,修改signal()是在调用时可见,还是在unlock()锁上调用时可见?
谢谢。
编辑:我在 javadoc 中看到Lock:
所有 Lock 实现必须强制执行与内置监视器锁提供的相同内存同步语义,如 The Java™ Language Specification 的第 17.4 节所述:
- 成功的锁定操作与成功的锁定操作具有相同的内存同步效果。
- 成功的解锁操作与成功的解锁操作具有相同的内存同步效果。
不成功的锁定和解锁操作,以及重入锁定/解锁操作,不需要任何内存同步效果。
它们的意思是:“成功的锁定操作与进入synchronized块具有相同的内存同步效果”,以及“成功的解锁操作与退出块具有相同的内存同步效果synchronized”?