학습용 스핀 락의 빠진 계약

CAS 한 개로는 java.util.concurrent.locks.Lock의 기능을 모두 제공할 수 없다.

AtomicBoolean 게이트

재진입

같은 스레드의 두 번째 획득을 처리해야 한다.

소유자 검사

다른 스레드의 unlock을 거부해야 한다.

취소

대기 중 인터럽트나 시간 제한이 필요하다.

공정성

오래 기다린 참여자의 순서를 다뤄야 한다.

핵심: 범용 배포보다 CAS 원리를 검증하는 작은 실험에 한정한다.