공부한 것
Busy Waiting
hsnyus
2026. 6. 5. 18:45
Busy Waiting?
바쁜 대기(Busy Waiting)는 말그대로 CPU를 바쁘게 쓰면서 기다린다는 뜻이다.
어떤 스레드에서 공유 자원을 쓰려할때 다른 스레드가 이미 락(Lock)을 쥐고 있을 때 Sleep 하는 대신 무한 루프를 돌면서 락이 풀렸는지 계속 확인하는 방식이다.
예시 코드
volatile int lock = 0;
void critical_section(){
while (lock == 1) {
}
lock = 1;
lock = 0;
}
이런식으로 구현된다.
왜 씀?
굳이 Sleep 시키지 않고 무한 루프를 돌면서 CPU를 낭비해가면서 이걸 쓰는 이유가 있다.
- 속도가 빠르다: 조건이 만족되었을 때는 속도가 빠르다. 뮤텍스(Mutex)같은 방식은 락을 못 얻으면 Sleep시키고 락이 풀리면 깨우는데 이때 Context Switching이 있어 무거운데, 이 방식은 스레드가 계속 실행중이어서 락이 풀리자마자 딜레이 없이 다음 코드 실행이 가능하다.
다만 루프 돌고 있는 코어는 락 풀릴 때까지 계속 무한 루프 도느라 점유율 100을 찍어서 낭비하게 된다.
특히 싱글 코어 환경에서는 Deadlock에 걸릴 위험이 있다.