← 질문 목록
#248깊이 0

멀티스레드 환경에서 스레드 세이프한 코드를 작성하는 방법은 무엇인가?

운영체제심화동시성

임계 영역에 동시에 들어가지 못하게 해 데이터 일관성을 지킨다. 잠금은 그중 한 가지 방법이다.

제어 방법설명
동기화synchronized나 Lock으로 한 번에 하나만 들어가게 한다
불변성final과 읽기 전용 객체로 바뀔 일 자체를 없앤다
원자성Atomic 클래스로 읽고 고치는 것을 한 연산에 끝낸다

동기화·불변성·원자성은 공유 자원에 동시에 쓰는 경로를 줄이거나 없앤다. 읽고 쓰는 중간에 문맥이 바뀌면 값이 어긋난 채로 남을 수 있다.

락을 과하게 걸면 느려진다. 기다리는 스레드가 늘고 그만큼 전환 비용이 붙기 때문이다.

상황에 따라 CAS 같은 원자적 연산으로 락 없이 구현하기도 한다. 일관성은 지키면서 기다리는 비용을 피하는 길이다.

추천 꼬리질문

0/300

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

관련 질문

멀티스레드 환경에서 스레드 세이프한 코드를 작성하는 방법은 무엇인가?