메모리 가시성

골드곽
|2024. 9. 20. 15:28
반응형

캐시 메모리의 runFlag를 읽는다.

 

메인 메모리가 아닌 캐시 메모리의 값만 바뀐다.

 

메인 메모리에 반영은 언제 될까? 모른다. 평생 안될수도 있다.

 

그럼 언제 값이 변경될까?

 

컨텍스트 스위칭이 될때 변경이 된다. (높은 확률로 갱신 되는데 안될수도 있다.)

 

이런 문제를 메모리 가시성이라고 한다

 

이런 문제를 해결 하는게 volatile 

단 성능문제가 생길수있다.

 

근데 volatile을 사용안하고 메인메모리의 값이 바뀔수 있다.

그건 컨텍스트 스위칭이 가끔 일어나서 그런것인데, 이건 장담할수없다.

 

그러니 확실한 volatile을 사용하는게 맞다.

 

그런데 console에 값이 딱 맞게 어떻게 떨어질까?

콘솔 찍힐때 컨텍스트 스위칭 되기 때문임 근데 이건 정확한건 아님

 

volatile은 꼭 써야할때 써야한다.

성능차이가 분명히 있다.

 

happens-before

volatile키워드를 넣으면 happens-before 관계가 되는것이다.

 

 

 

 

 

반응형

'공부 > Java' 카테고리의 다른 글

제네릭 사용이유  (0) 2024.10.02
스레드 기본 정보  (1) 2024.09.18
스레드 생성과 실행  (0) 2024.09.16
프로세스와 스레드란  (0) 2024.09.16
래퍼, Class 클래스란  (0) 2024.05.30