在使用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()成功返回之后的操作之前。
关于java - 在CyclicBarrier上进行可见性同步?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17897732/