← 질문 목록
#52깊이 0

volatile은 무엇을 보장하고 놓치는가?

언어 · 런타임심화동시성

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

volatile 쓰기는 뒤따르는 같은 변수의 읽기보다 먼저 일어난다. 해당 접근을 경계로 가시성과 재정렬 제약을 제공하지만 복합 연산은 원자화하지 않는다.

기준volatilesynchronized
가시성·순서보장한다보장한다
복합 연산 원자성보장하지 않는다같은 모니터로 보호할 때 보장한다

한 스레드가 volatile 변수에 쓰기 전에 수행한 일반 쓰기도 그 값을 읽은 스레드에 보인다. 이 happens-before 관계가 다른 상태의 전달까지 만든다.

단순 상태 플래그와 완전히 생성된 객체 참조의 게시에는 적합하다. 이중 확인 잠금의 인스턴스 참조에도 필요하다.

count++는 읽기, 계산, 쓰기의 세 단계라 volatile이어도 갱신을 잃을 수 있다. 경쟁 갱신에는 AtomicInteger나 잠금이 필요하다.

추천 꼬리질문

0/300

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

관련 질문

volatile은 무엇을 보장하고 놓치는가?