OS · SYNC
Futex 빠른 경로와 느린 경로
Futex는 경합이 없을 때 사용자 공간에서 빠르게 끝내고, 경합이 생길 때만 커널에 들어가 sleep/wake로 CPU 낭비를 줄입니다.
락 획득 경로
futex
user CAS
사용자 공간에서 원자적 시도
fast path
경합 없음이면 커널 진입 없음
futex wait
경합 시 커널에서 잠들기
futex wake
unlock이 대기 스레드를 깨움
user CAS
→
fast path
→
futex wait
→
futex wake
비교 기준
check
스핀락
짧은 대기에는 빠르지만 오래 돌면 CPU를 낭비합니다.
뮤텍스
잠들어 CPU를 아끼지만 커널 전환 비용이 있습니다.
Futex
무경합은 빠르고 경합은 잠드는 절충입니다.
주의
공정성과 우선순위 역전 문제는 구현 정책을 봐야 합니다.