• 이전 솔루션은 일반적인 사용자들이 사용 불가/하드웨어
• OS설계자는 임계구역 문제를 해결하기 위한 소프트웨어 도구(API) 제공
• 동기화를 위한 가장 간단한 도구
/ 함수 형태 같은 소프트웨어 제공
예시) 공통 연결 프린터: 동시 출력되면 안됨,
키를 가진 사람만 사용 가능하도록.
과정:
▷Admin에게 키 사용 가능 여부 물어보고 key 받음.
▷모두 acquire(키를 얻는)하더라도 1명만 사용,
나머지는 대기
▷Admin에게 키 반납(release) / lock 해제
▷acquire() 및 release()는 원자적이어야 함.
(하드웨어 원자 명령어. ex)text_and_set처럼 구현)
• bool available: lock을 얻을 수 있는지 true/false
• acquire(): 1인지 확인, 0이면 대기. 본인이 들어오면 다른 이들이 못 들어오도록 lock
• release(): 키 반납



➡ busy waiting (바쁜 대기) 발생 = spinlock
• 발생 문제점) 대기하는 동안 바쁘게 됨(while)
-키가 생길 때까지 조건만 계속 확인
-CPU가 계속 사용됨. 성능에 악영향
• 해결 방법) 조건을 만족하지 않으면 ⇨sleep
-대신 나중에 누군가가 깨워주기
• single-core일 때는 busy waiting이 매우 안 좋았음
• 현대 multi-core일 때는 임계 구역 크기가 보통 작으므로 빨리 수행, 기다리는 동안 일 가능하여 문제 xx
• 오히려 context-switching하는 것보다 busy waiting이 더 나을 때가 있을 수도.