공부한 것

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에 걸릴 위험이 있다.