멀티스레드 환경에서 CAS 연산도 락을 사용하지 않고, 동시성 문제를 해결할 수 있습니다
CAS를 사용하면 락을 사용하지 않으면서 다른 스레드가 먼저 증가해서
문제가 발생하는 경우에는 do-while 문을 돌며 재시도하는 방식을 사용합니다
CAS를 사용하는 방식은 스레드 충돌이 드물게 발생하는 환경에서는
락을 사용하지 않기 때문에 보다 더 높은 성능을 발휘할 수 있습니다
락을 사용하는 방식과 비교했을 때, 스레드가 락을 획득하기 위해 대기하지 않기 때문에
대기시간과 오버헤드가 줄어드는 장점이 있습니다
충돌이 빈번히 발생하는 환경에서는 성능에 문제가 될 수 있습니다
여러 스레드가 동시에 자주 변수값을 변경하려고 시도한다면 CAS는 자주 실패하고 재시도하기 때문에
성능 저하가 발생할 수 있습니다
이 경우에는 반복문을 돌며 CPU 자원을 많이 소모하게 됩니다
충돌이 많이 없는 경우에 CAS 연산이 더 빠르며, 간단한 CPU 연산인 경우 빨리 처리되어서
충돌이 자주 발생하지 않기 때문에 이 경우에 사용하는 것이 적합합니다
예를들어 1000개의 스레드가 모두 락윽 획득하고 반환하는 과정을 거치면,
1000개의 스레드가 순서대로 하나씩 수행되고, 50개의 스레드가 충돌하게 됩니다
하지만 CAS 방식을 사용하면 1000개의 스레드를 모두 한번에 실행하며,
충돌이 나는 50개의 경우만 재시도 합니다
따라서 간단한 CPU연산 작업을 해야한다면 락보다는 CAS 연산을 사용하는 것이 더 효율적입니다