← 질문 목록
#184깊이 0

volatile 키워드는 가시성 문제를 어떻게 해결하는가?

언어 · 런타임심화동시성

메인 메모리에서 직접 읽고 쓰게 하여 모든 스레드가 최신 값을 보게 한다. 캐시를 건너뛰어서가 아니다. 메모리 모델이 정한 가시성과 순서를 지키도록 강제하고, 그것을 메모리 장벽과 캐시 일관성 장치가 받쳐 준다.

  • 스레드 AL1/L2 캐시. 지역적으로 값을 복사해 사용한다
  • 메인 메모리공유 영역. volatile 변수가 저장되는 곳
  • 스레드 BL1/L2 캐시. 메모리에서 직접 읽어 최신값을 얻는다

CPU는 성능을 위해 값을 캐시에 복사해 쓴다. 여러 스레드가 같은 변수를 수정할 때 각자 캐시만 보면 다른 값을 가지게 된다.

volatile은 읽기/쓰기 시점에 메모리 장벽을 세운다. 이렇게 해서 자바 메모리 모델이 정한 가시성과 순서를 지킨다. 캐시를 실제로 어떻게 다룰지는 JVM과 CPU가 알아서 한다.

다만 원자성은 보장하지 않는다. count++ 같은 연산은 읽기, 수정, 쓰기 세 단계로 나뉘어 여전히 데이터 경쟁이 발생한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

volatile 키워드는 가시성 문제를 어떻게 해결하는가?