락 경로

락은 빠른 경로부터 차례로 내려간다

같은 임계 영역이라도 경합이 없을 때, 짧게 겹칠 때, 오래 막힐 때의 비용이 완전히 다르다.

0 syscall

사용자 공간 CAS

락 값이 비어 있으면 원자적 명령어 한 번으로 바로 진입한다.

short wait

잠깐 스핀

다른 코어가 곧 unlock할 가능성이 크면 CPU를 쓰며 짧게 반복한다.

futex wait

커널 대기 큐

임계 영역이 길면 스레드를 재워 CPU 낭비를 줄인다.

wake retry

깨어난 뒤 재경쟁

unlock이 대기자를 깨우면 다시 락 값을 확인하고 획득을 시도한다.

스핀락

커널 내부의 매우 짧은 구간처럼 잠드는 비용이 더 클 때 적합하다.

뮤텍스

일반 사용자 공간 코드처럼 오래 기다릴 수 있으면 슬립이 안전하다.

futex

평소에는 CAS로 빠르게 끝내고 경합 때만 커널 도움을 받는다.