2014-02-25 3 views
0

은 다음과 같습니다C#의 volatile과 java의 차이점은 무엇입니까? 컴파일러는 휘발성 처리하는 방법을 내가 이것을 읽고 일부 .NET 문서에서

  • *
  • "는에 쓰기"휘발성 읽거나 Thread.VolatileRead 방법을 사용하는 것은 논리적으로 획득 울타리입니다 " 휘발성 또는 스레드를 사용하여 .VolatileWrite 메서드는 논리적으로 릴리스 펜스 "*

이러한 펜스는 컴파일러 및 아키텍처 수준 모두에 적용됩니다.

물론 VC++의 주된 차이점은 펜스가 컴파일러 레벨에만 적용된다는 것입니다.

제 질문은 자바의 휘발성 메모리에 대한 메모리 재정렬 방지 의미 란 무엇입니까?

변환 :

울타리 = 배리어 장벽 = 울타리

참고 :

조 더피 (Windows의 동시 프로그래밍)

자바에서
+0

물론 어휘가 제가 알고 – fge

+0

없음 차이가 없습니다하지만 당신의 JLS (http://docs.oracle.com/javase/specs/)에서 답을 찾아야한다; Java에서의 일시적인 읽기는 획득 (acquire)과 동일합니다. 릴리스에 대한 쓰기 - CLR과 동일합니다. – Voo

답변

1

javac 컴파일러와 아무것도 옆에 않습니다 휘발성 물질. 그것은 명령문을 재정렬하지 않으며 거의 ​​최적화하지 않습니다.

반면에 JIT는 많은 양의 최적화 및 재정렬을 수행 할 수 있습니다.

volatile의 중요한 기능은 다음과 같습니다.

  • 읽기/쓰기 액세스는 멀리
  • 휘발성 쓰기 쓰기 전에 발생하기 전에 발생하는 모든 쓰기를 최적화 할 수 없습니다.
  • 휘발성 읽기 후에 발생하는 모든 읽기는 읽기 후에 발생해야합니다.