현재 값을 읽음
스레드는 공유 변수의 old 값을 복사하고 그 값을 기준으로 계산한다.
락을 잡지 않는 대신 읽은 값이 그대로인지 확인하고, 틀리면 계산을 버린 뒤 새 값으로 다시 시도한다.
스레드는 공유 변수의 old 값을 복사하고 그 값을 기준으로 계산한다.
아직 공유 메모리는 바꾸지 않고 지역 변수에서 결과를 만든다.
메모리가 old 그대로이면 new로 교체하고, 아니면 실패한다.
다른 스레드가 먼저 바꿨다는 뜻이므로 최신 값부터 다시 읽는다.
A를 읽었는데 메모리가 C로 바뀌어 있으면 CAS는 실패하고 재시도한다.
A가 B를 거쳐 다시 A가 되면 값 비교만으로는 중간 변경을 놓칠 수 있다.
포인터나 노드 참조처럼 변경 이력이 중요한 값은 값과 버전 번호를 함께 비교해서 A:7이 A:9로 돌아온 상황까지 구분한다.