반응형

Atomic 2

Atomic 클래스와 CAS - 락 없는 동시성은 어디까지 가능한가?

앞선 편에서 살펴본 synchronized와 Lock은 배타성을 통해 동시성 문제를 해결했다.하지만 배타성에는 항상 비용이 따른다.락 경합컨텍스트 스위칭대기 시간 증가이 비용을 줄이기 위한 시도로 등장한 것이 Atomic 클래스와 그 기반이 되는 CAS(Compare-And-Swap)다.이 글에서는 락 없는 동시성이 무엇을 의미하는지, 그리고 Atomic 클래스가 어디까지 안전한지를 공식 문서 기준으로 정리한다.1. Atomic 클래스는 왜 등장했는가?멀티스레드 환경에서 다음과 같은 연산은 매우 흔하다.count++;하지만 이 연산은읽기계산쓰기의 세 단계로 이루어지며, 원자적이지 않다.synchronized로 보호하면 안전하지만, 매번 락을 거는 것은 비용이 크다.Atomic 클래스는 “단일 변수에 대한..

[Kotlin 공식 문서 정리] 19. 공유 상태와 동시성 제어

이전 글에서는 StateFlow와 SharedFlow를 활용한 실전 사용 패턴을 살펴봤습니다.그런데 Flow나 코루틴을 사용한다고 해서 동시성 문제가 자동으로 해결되는 것은 아닙니다.Kotlin 공식 문서에서는 여러 코루틴이 하나의 상태를 함께 수정할 때 발생하는 문제를 Shared mutable state and concurrency라는 섹션으로 따로 다룹니다.이 글에서는 그 내용을 기반으로, 왜 문제가 생기는지와 Kotlin이 이를 어떻게 해결하도록 안내하는지를 정리합니다.1. 공유 상태 문제는 왜 발생할까?다음과 같은 코드를 생각해봅시다.var counter = 0suspend fun increment() { counter++}이 함수가 여러 코루틴에서 동시에 호출되면 counter 값은 예상..

Backend Core/Kotlin 2026.01.12
반응형