繁体   English   中英

在CyclicBarrier上进行可见性同步?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM