Futex는 대부분 사용자 공간에서 끝내고 경쟁 때만 커널로 간다
lock 값이 비어 있으면 atomic 연산으로 바로 진입하고, 이미 잡혀 있으면 futex wait로 커널 대기열에 들어간다.
atomic try
user space
락 값 먼저 확인
fast path
성공
커널 진입 없음
slow path
실패
futex wait
wake
unlock
필요한 대기자 깨움
경로
일어나는 일
성능 의미
fast path
CAS 성공
system call 없음
slow path
커널 대기
경합 비용만 지불
wake
대기자 선택
thundering herd 주의
spurious wake
다시 검사
while 조건 필수