OS

스핀락(Spin Lock)

둠치킨 2025. 6. 24. 21:14

스핀락(Spin Lock)이란?

스핀락은 임계영역에 진입하기 위해 락이 해제될 때까지 루프를 돌며(busy waiting / active waiting) 대기하는 락 기법이다.
즉, 락이 걸려 있을 때 블록 상태로 대기하지 않고, 계속해서 락을 얻기 위해 시도하는 방식이다.


작동 방식

  1. 한 스레드가 락을 획득하면, 다른 스레드는 락이 풀릴 때까지 계속 CPU를 점유한 채 반복 검사(spin) 한다.
  2. 락이 해제되면 가장 먼저 락을 검사하던 스레드가 락을 획득하고 임계영역에 진입한다.
// 간단한 의사 코드
while (locked) {
    // do nothing (busy wait)
}
locked = true;
// 임계영역
...
locked = false;

특징

  • 장점
    • 컨텍스트 스위칭이 발생하지 않아, 락이 짧게 유지될 경우 오히려 성능이 좋을 수 있음
    • 커널 수준의 락보다 구현이 간단하고 오버헤드가 적음
  • 단점
    • 락이 길게 유지되면 CPU 자원을 낭비
    • 스레드가 선점되지 않는 환경(커널 모드)에서 더 적합

사용 시점

스핀락은 다음과 같은 상황에서 주로 사용된다.

  • 락 유지 시간이 매우 짧을 것으로 예상되는 경우
  • 커널 내부에서 락을 걸고, 스케줄링을 허용하지 않으려는 경우
  • 멀티코어 환경에서 간단한 동기화가 필요한 경우

비교: 스핀락 vs 뮤텍스

항목 스핀락 뮤텍스
대기 방식 busy waiting (루프 돌기) passive waiting (block & wakeup)
컨텍스트 스위칭 없음 있음
CPU 자원 낭비될 수 있음 절약 가능
사용 환경 짧은 임계영역, 커널 내부 등 사용자 영역 일반 동기화