원래 해당 내용이 더 먼저 쓰였는데, 누락되서 이제야 올립니다.
while (!flag) {
// do nothing: 계속 검사만 함 (CPU 낭비)
}
busy waiting(바쁜 대기)는 CPU를 낭비하며 특정 조건이 만족될 때까지 반복적으로 루프를 도는 방식입니다. 즉, flag를 예시로 들면, CPU가 시그널이나 I/O 입력등의 조건이 될때까지 flag 상태만 체크하는 문제입니다.
→ 해당 문제를 해결하기 위해 sleep과 wait 매커니즘을 사용합니다.

프로세스를 sleep 상태로 두고, 외부 요청(I/O, 다른 쓰레드의 시그널 등)이 나오면 깨움.
→ pause로 대기를 걸고, 요청이 들어오면 signal handler가 실행되면서 일어남
쓰레드는 조건이 충족될 때까지 wait() 이고 다른 쓰레드가 조건을 만족시키면 notify() 알림을 통해 깨운다.
→ CPU를 쓰지 않고 대기 가능하며 이벤트 기반으로 깨운다.
네트워크나 파일 디스크립터에서 요청을 기다릴 시, 요청이 오면 깨어나서 처리합니다.
→ Busy waiting 대신 sleep 방식
근데 이러한 방식이 성능이 안좋기 때문에 세마포어와 Mutex, monitor 방식을 사용한다.