빠에야는 개발중

CAS(Compare And Swap) 알고리즘 본문

공부/JAVA

CAS(Compare And Swap) 알고리즘

빠에야좋아 2020. 8. 6. 22:42

무엇인가?

CAS(Compare And Swap)은 동시성 처리를 위한 세가지 방법(volatile, synchronized, CAS) 중 하나로서 말 그대로 “비교한 후 바꿔주는 것”이다. 멀티 스레드, 멀티 코어 환경에서 각 변수는 스레드 내의 스택(캐시)에 저장된다. 이 변수에 대해서 스레드에 저장된 값과 메인 메모리에 저장된 값을 비교하여 값이 같다면 새로운 값으로 치환해준다. 값이 다르다면 계속 재시도를 한다. CAS는 lock을 걸지 않고 변수마다 동기화를 하기 때문에 값이 싸다. 물론 volatile 키워드도 변수마다 동기화를 해줄 수 있지만 읽기 연산에서만 사용할 수 있다는 단점이 있다. 실제로 CAS의 내부 구현에서 메인 메모리의 값을 가져오는 용도로 volatile을 사용한다.

 

CAS 알고리즘의 흐름도

어디에 쓰이는가?

변수마다 동기화를 해줄 수 있는 특징 덕에 AtomicXXX 클래스에 사용된다. Atomic 자료형은 기본형인 int, long 등의 동기화를 보장해주는 자료형인데, 내부에서 CAS 알고리즘을 사용한다.

또 ConcurrentHashMap 클래스에서도 사용되는데, 빈 버킷에 값을 넣을 때 CAS 알고리즘을 사용함으로써 빠르게 처리해줄 수 있다. (이미 값이 들어있으면 synchronized를 사용한다.)

'공부 > JAVA' 카테고리의 다른 글

OSIV  (401) 2020.10.28
N+1 문제  (0) 2020.10.28
String, StringBuffer, StringBuilder  (0) 2018.03.17
abstract class와 interface  (0) 2018.03.17
스트림 api  (0) 2018.03.01
Comments