2013-07-27 8 views
1

Java에서 스레드를 동기화하는 데 CyclicBarrier를 사용하는 경우 비 휘발성 변수를 동기화합니까? CyclicBarrier에서의 Visibilty 동기화?

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의 시도 ...

+0

먼저 Thread2를 호출 하시겠습니까 ?? – Mac

+0

중요합니까? 'Thread t1 = new Thread1(); 스레드 t2 = 새로운 Thread2(); t1.start(); t2.''();' – Explicat

+0

음 ...'t1'이't2' 전에 시작한다는 보장은 없습니다. – Mac

답변

1

사용자가 예상하는대로 당신은으로 CyclicBarrier 클래스를위한 Javadoc에서 볼 수 있듯이 예, 가시성, 발생 : 스레드 이전에 조치 :

메모리 무결성 효과 장벽 액션의 일부인 액션 이전에 await()가 발생합니다.이 액션은 다른 스레드의 해당 await()에서 성공적으로 반환 된 액션보다 먼저 발생합니다.