← 질문 목록
#191깊이 0
공유 자료구조를 Thread-Safe하게 만드는 방법은 무엇인가?
여럿이 함께 써도 값이 어긋나지 않게 하는 것이다. 잠금으로 한 번에 하나만 들이는 길도 있고, 아예 안 바뀌게 하거나 스레드마다 따로 두거나 원자 연산으로 끝내는 길도 있다.
| 기준 | 동기화 블록 | CAS (Compare-And-Swap) |
|---|---|---|
| 방식 | 락으로 접근 제어 | 값 비교 후 교체 |
| 성능 | 컨텍스트 스위칭 비용 발생 | 논블로킹으로 성능 높음 |
| 특징 | 구현이 쉽고 안전함 | 스핀락으로 CPU 점유율 상승 |
동기화 블록이나 synchronized 키워드를 사용하면 임계 영역을 최소화하여 동시성 제어를 가능하게 한다. 하지만 락을 획득하지 못한 스레드는 대기 상태로 전환되어 컨텍스트 스위칭 비용이 발생한다.
CAS 연산은 락을 사용하지 않은 논블로킹 알고리즘으로 구현된다. 현재 값과 예상 값이 일치할 때만 새로운 값으로 교체하는 원자적(Atomic) 원리를 이용한다.
읽기가 많은 자리에서는 읽기-쓰기 락으로 읽기와 쓰기를 나눈다. 읽기끼리는 서로 막지 않으므로 동시에 들어갈 수 있다.