[英]Visibility synchronization at CyclicBarrier?
在使用CyclicBarrier同步Java中的线程时,它们是否同步非易失性变量?
int a = 0;
int b = 0;
CyclicBarrier barrier = new CyclicBarrier(2);
/*** Thread 1 ***/
public void run() {
a = 2;
barrier.await();
doSomeStuff(b); // no side-effects
}
/*** Thread 2 ***/
public void run() {
b = 3;
barrier.await();
doSomeStuff(a); // no side-effects
}
我们可以确定在线程1的doSomeStuff调用b上已设置为3吗? 尝试时总是3 ...
是的,可见性如您所愿,正如您从CyclicBarrier类的javadoc中看到的那样:
内存一致性影响:线程中的操作在调用await()之前发生在作为屏障动作一部分的动作之前,而这些动作又发生在在其他线程中从相应await()成功返回之后的动作之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.