[JAVA]CAS(Compare And Swap)

무지성개발자·2023년 8월 22일
0

CAS

자료구조에서 동시성을 제어하는 방법으로 하나의 락으로 전체를 관리하는 synchronize, 여러개의 락으로 버킷관리를 하는 Lock Striping이 있는데 둘의 공통점은 Lock을 사용한다는 것이다.

CAS는 비교 후 값이 같으면 변경, 다르면 변경하지 않는 방법으로 Lock없이 동시성을 제어하는 방법이다.

특징

  • 동시에 여러 쓰레드가 접근해도 안전하게 데이터를 수정할 수 있도록 하는 기술.

  • atomic operation 중 하나로, 변수의 값을 변경할 때 사용.

  • 3개의 인자를 갖는다.

    • 연산할 메모리 위치 M
    • 예상되는 이전 값 OV
    • 새로운 값 NV
  • 리턴 값은 변경하던 안하던 항상 메모리 값(M)을 반환.

동작 방식은 다음과 같다.

  • 메모리 위치(M)의 값과 예상되는 이전 값(OV)를 비교한다.
  • 같다면 내가 예상한 동작이 맞으므로 새로운 값(NV)로 변경
  • 틀리면 내가 예상한 값이 아니므로 변경작업이 있었다는 의미이므로 아무것도 하지 않음.

동시에 여러 쓰레드가 접근한다면 경쟁을 통해 한 쓰레드만 업데이트하고 나머지는 손실 된다.


한 줄평 : 경쟁을 통해 한 쓰레드만 업데이트하고 나머지는 손실되는 이유는 결국 예상하고 온 OV값이 다를테니 그냥 소실 시켜버리는 것일까?

참고 -
https://www.netjstech.com/2016/06/non-blocking-algorithms-in-java.html
https://liltdevs.tistory.com/166

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글