Learning
토픽 27 / 85·프로세스 동기화와 교착상태

Spinlock (스핀락)

Spinlock (스핀락)

잠금 획득을 위해 블로킹하지 않고 CPU를 계속 점유하며 busy-waiting하는 동기화 기법으로, 짧은 임계 구역과 멀티코어 환경에서 컨텍스트 스위칭 오버헤드를 피하기 위해 사용

목적: 짧은 대기 최적화, 컨텍스트 스위칭 회피, 커널 동기화, 인터럽트 핸들러

특징: Busy-Waiting, 블로킹 없음, 원자적 연산, 짧은 임계 구역 전용, CPU 낭비

동작: lock() → while(locked) {} (spin) → 획득 시 임계 구역 진입 → unlock()

구현: Test-and-Set, Compare-and-Swap(CAS), Fetch-and-Add 등 원자적 명령어

적합한 경우: 임계 구역 매우 짧음(수 μs), 멀티코어, 인터럽트 핸들러, 커널 동기화

부적합한 경우: 긴 임계 구역(CPU 낭비), 단일 코어(데드락 위험), 사용자 공간(컨텍스트 스위칭 이득)

장점: 컨텍스트 스위칭 없음, 빠른 획득(짧은 대기 시), 단순 구현, 인터럽트 핸들러 가능

단점: CPU 낭비(busy-wait), 긴 대기 시 비효율, 우선순위 역전, 단일 코어 부적합

변형: Ticket Lock(공정성), MCS Lock(확장성), Adaptive Lock(짧으면 spin, 길면 sleep)

적용사례: Linux 커널(spinlock_t), 멀티코어 동기화, 인터럽트 핸들러, 드라이버, 네트워크 스택

비교: Spinlock(busy-wait/빠름/짧은구역) vs Mutex(sleep/느림/긴구역) vs Adaptive Lock(하이브리드)

연관: 뮤텍스, 원자적 연산, CAS, 커널 동기화, busy-waiting