C++
CAS ( Compare and swap )
더코드마니아
2022. 10. 7. 17:49
CAS??
멀티스레딩 환경에서 동기화를 달성하기 위한 원자적 명령이다.
정의는 위와 같고,
동작적인 측면에서는
현재의 값과 비교값을 일치하는 경우 새로운 값으로 교체 하고,
다른 경우에는 지속적으로 재시도를 하는 특징을 가진다.
CAS를 이해하려면 원자성에 대해 알아야 한다
원자성 이해
아래 코드 한줄을 보자.
a++;
디스 어셈블리로 확인 하면 실제 코드는 한줄이 아니다.
1) a 변수 주소의 값을 레지스터로 복사
2) 증가
3) 다시 변수로 값 복사
3회 의 처리 과정이 필요하다.
이런 코드들은 멀티 스레드 환경에 노출되면
동기화 문제가 발생하기 때문에
lock 처리를 한다.
lock 처리를 한다고 해서 3회의 처리과정이 1회로 바뀌는 것은 아니라
스레드 접근을 제어 하기 때문에 문제가 없어진다.
lock 처리를 하지 않고, 단 1회로 처리한다면
lock처리가 필요없을 것이다.
이렇게 1회성으로 코드가 실행되는 것을 보장해 주는 것이 원자성이다.
게임서버에서는 CAS를 이용해서
SpinLock 을 구현하기도 한다.