3

java jpoint conference에서 비디오를보고 있습니다.순차적 일관성 휘발성 설명

enter image description here

슬라이드에 영어 이외의 실례 :

나는 Alexey Shipilev 보고서에서 슬라이드를 다음에 대한 질문이 있습니다. 실제로 작가는 변수 세트가 될 수 없다고 말합니다.

r1 = 1 (Y) 
r2 = 0 (x) 
r3 = 1 (x) 
r4 = 0 (Y) 

비디오에 따르면 그는 분명히 그렇다고 암시합니다.

누군가 JMM에 따라이 값을 설정할 수없는 이유를 분명히 할 수 있습니까?

P.

나는 알렉세이가 표기는 다음 코드를 존중 수정 이해한다면 :

public class SequentialConsistency { 
    static volatile int x; 
    static volatile int y; 

    public static void main(String[] args) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       x = 1; 
      } 
     }).start(); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       y = 1; 
      } 
     }).start(); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       System.out.println("r1=" + x + ", r2=" + y); 
      } 
     }).start(); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       System.out.println("r3=" + x + ", r4=" + y); 
      } 
     }).start(); 
    } 
} 
+1

코드에 '휘발성 x, y;'가없고 r3 및 r4가 없는데 왜 슬라이드가 올바르게 표시됩니까? –

+0

@Erwin Bolwidt 질문을 번역 할 수 없습니다. 그것을 바꿔 말할 수 있습니까? – gstackoverflow

+0

코드에서 x, y, r3 및 r4는 어디에 있습니까? –

답변

2

내가 이해할 수 있다고 생각합니다.

우리는 4 개의 스레드가 있다고합니다. (화상있어서 좌측에서 우측으로) T1-T4

T3Y하고 X 판독 우리 결과

y=1 
x=0 

그것은 그 서열은 다음 하였다 수단 참조 :

  1. t1 쓰기 y
  2. T3는 T2X
  3. 그것만 posiible 시퀀스 인 X

를 기입 판독 Y 5,

  • 는 T3를 읽는다.

    T4 그것을 확인 판독하자 : T3 것이

    t2 writet1 write 전에 발생한다는 뜻

    x=1 
    y=0 
    

    따른 추론을하지만 출력 따라서 불가능 T3 모순

  • +0

    믿습니다. 모든 스레드에 대해 y = 1을 의미하므로, 값이 1로 설정된 경우 y = 0을 읽는 스레드가 불가능합니다. 휘발성으로 표시되지 않은 값은 스레드가 스레드를 가질 수 있습니다 이 값은 스레드 메모리에 저장되기 때문에 주어진 값 시퀀스. 모든 스레드가 동일한 변수에 대해 다른 값을 포함 할 수 있음을 의미합니다. 이것은 나에게 많은 시간이 걸렸습니다. 로컬 스레드 메모리는 고통입니다. – MissingSemiColon

    2

    이 코드에 대한 SC 실행의 철저한 목록을 구성 할 수 있으며 SC 실행 산출량을 알지 못합니다 (1, 0, 1, 0).

    모델과 마찬가지로 논쟁하기가 쉽습니다.동기화 순서 (SO) 일관성은 동기화 된 읽기가 마지막으로 동기화 된 쓰기를 SO에 표시해야한다고 말합니다. SO-PO 일관성은 SO가 프로그램 순서와 일치해야한다고 말합니다.

    이렇게하면 모순으로 증명을 스케치 할 수 있습니다. yield (1, 0, 1, 0)가있는 실행이 있다고 가정합니다. 그런 다음, 그 실행에 그 제로 인해 SO 일관성이 순서에 있어야 볼 수 읽기 :

    (r2 = x):0 --so--> (x = 1) [1] 
    (r4 = y):0 --so--> (y = 1) [2] 
    

    ... 그리고 다른 두 인해 SO 일관성 (그들을보고 쓰기와 순서에 있어야 읽고)

    (x = 1) --so--> (r3 = x):1 [3] 
    (y = 1) --so--> (r1 = y):1 [4] 
    

    ... 또한 의한 SO-PO의 일관성이 이상한 전이를 산출

    (r1 = y):1 --po--> (r2 = x):0 [5] 
    (r3 = x):1 --po--> (r4 = y):0 [6] 
    

    그래서 환상이다

    ,
    (r2 = x):0 --so--> (r3 = x):1 --so--> (r4 = y):0 --so--> (r1 = y):1 --so--> (r2 = x):0 
          [1,3]    [6]    [2,4]    [5] 
    

    위의 실행에서 A! = B 쌍에 대해 (A --so--> B)(B --so--> A)을 말할 수 있습니다 - 이것을 대칭이라고합니다. 정의에 따르면, SO는 총 차수이고, 총 차수는 이고, 반대 대칭은이며 여기에는 대칭이 있습니다. 우리는 모순에 도달했으며, 따라서 그러한 집행은 존재하지 않습니다. Q.E.D.