Java ‐ CAS⚠️ & 동기화와 원자적 연산 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 원자적 연산의 개념
- 원자적 연산이란 해당 연산이 더 이상 나눌 수 없는 단위로 수행된다는 것을 의미한다.
- 즉, 원자적 연산은 중단되지 않고, 다른 연산과 간섭없이 완전히 실행되거나 전혀 실행되지 않는 성질을 가진다.
- 쉽게 이야기해서 멀티쓰레드 상황에서 다른 쓰레드의 간섭없이 안전하게 처리되는 연산이라는 뜻이다.
📚 원자적 연산 - volatile, synchronized
[ volatile ]
volatile
키워드는 여러 CPU 사이에 발생하는 캐시 메모리와 메인 메모리가 동기화되지 않는 문제를 해결할 뿐이다.
volatile
키워드를 사용하면 CPU의 캐시 메모리를 무시하고 메인 메모리를 직접 사용하도록 한다. 하지만 지금 이 문제는 캐시 메모리가 영향을 줄 수 있지만 캐시 메모리를 사용하지 않고 메인 메모리를 직접 사용한다고 하더라도 여전히 발생한다.
volatile
키워드는 연산 자체를 원자적으로 묶어주는 기능이 아니다.
[ synchronized ]
synchronized
키워드를 사용해 안전한 임계 영역을 만들고 연산을 수행하면 정확한 결과를 얻을 순 있으나 성능 저하가 발생할 가능성이 높다.
📚 원자적 연산 - AtomicInteger
[ AtomicInteger ]
- 자바는 멀티쓰레드 상황에서 안전하게 증가 연산을 수행할 수 있는
AtomicInteger
클래스를 제공한다. 이름 그대로 원자적인 Integer
라는 뜻이다.
- 다양한
AtomicXXX
클래스가 존재한다.
⚠️ CAS 연산의 개념
⚠️ CAS 락