2
다음과 같이하면 프로그램에 스레드가 2 개 밖에 없습니다.휘발성 변수가있을 때 재정렬이 가능합니까?
// Thread 1
write a = 0
write a = 1
write volatile b = 1
// Thread 2
read volatile b // this I always do after write volatile b in the 1st thread
read a
나는 자바 메모리 모델에 읽은 내가 스레드 2에서 이해하는 것과 read a
은 항상 나에게 1
이 나의 이해가 정확한지 아닌지 내가 알고 싶습니다을 줄 것이다.
특히 REORDERING은 여전히 HAPPEN이므로 두 번째 스레드에서 = 0을 볼 수 있습니까?
스레드 1에서 왜 재정렬이 발생할 수 없는지 아직 이해할 수 없습니다. 이유는 0이 될 수 없습니까? 아아아, 그냥 이해 못 하겠어, 제발, JLS 사양을 참조하십시오. –
@Alex - 링크 된 질문에 대한 답변은 JLS를 참조합니다. 기본적으로 휘발성 쓰기 후에는 쓰기를 이동할 수 없으며 휘발성 읽기 전에 어떤 읽기도 이동할 수 없습니다. – jtahlborn