스핀락(Spin Lock)이란?
스핀락은 임계영역에 진입하기 위해 락이 해제될 때까지 루프를 돌며(busy waiting / active waiting) 대기하는 락 기법이다.
즉, 락이 걸려 있을 때 블록 상태로 대기하지 않고, 계속해서 락을 얻기 위해 시도하는 방식이다.
작동 방식
- 한 스레드가 락을 획득하면, 다른 스레드는 락이 풀릴 때까지 계속 CPU를 점유한 채 반복 검사(spin) 한다.
- 락이 해제되면 가장 먼저 락을 검사하던 스레드가 락을 획득하고 임계영역에 진입한다.
// 간단한 의사 코드
while (locked) {
// do nothing (busy wait)
}
locked = true;
// 임계영역
...
locked = false;
특징
- 장점
- 컨텍스트 스위칭이 발생하지 않아, 락이 짧게 유지될 경우 오히려 성능이 좋을 수 있음
- 커널 수준의 락보다 구현이 간단하고 오버헤드가 적음
- 단점
- 락이 길게 유지되면 CPU 자원을 낭비함
- 스레드가 선점되지 않는 환경(커널 모드)에서 더 적합
사용 시점
스핀락은 다음과 같은 상황에서 주로 사용된다.
- 락 유지 시간이 매우 짧을 것으로 예상되는 경우
- 커널 내부에서 락을 걸고, 스케줄링을 허용하지 않으려는 경우
- 멀티코어 환경에서 간단한 동기화가 필요한 경우
비교: 스핀락 vs 뮤텍스
항목 | 스핀락 | 뮤텍스 |
대기 방식 | busy waiting (루프 돌기) | passive waiting (block & wakeup) |
컨텍스트 스위칭 | 없음 | 있음 |
CPU 자원 | 낭비될 수 있음 | 절약 가능 |
사용 환경 | 짧은 임계영역, 커널 내부 등 | 사용자 영역 일반 동기화 |
'OS' 카테고리의 다른 글
캐시 메모리란? (0) | 2025.06.25 |
---|---|
프로그램은 어떻게 실행되는가 (0) | 2025.06.24 |
세마포어(Semaphore) (0) | 2025.06.24 |
뮤텍스(Mutex) (0) | 2025.06.24 |
멀티쓰레드 환경에서 생길 수 있는 문제들 (0) | 2025.06.24 |