실행 순서 제어를 통한 동기화 예시
상호 배제를 위한 동기화 예시
공유자원 - 여러 프로세스 혹은 스레드가 공유하는 자원
임계구역 - 동시에 실행되면 문제가 발생하는 자원이 포함된 코드영역
OS가 Race Condition을 해결하는 세 가지 원칙
wait - 임계 구역에 들어가도 되는지 알려주는 함수, 카운팅하고 있는 공유자원을 -1
signal - 임계 구역 앞에서 대기하는 프로세스에게 가도 된다고 신호를 주는 함수, 카운팅하고 있는 공유자원 +1
busy waiting를 해결하기 위해서, 사용할 수 있는 자원이 없을 경우에 대기상태로 전환(해당 프로세스의 PCB를 대기 큐에 삽입). 사용할 수 있는 자원이 생겼을 경우 대기 큐의 프로세스를 준비상태로 만듦(해당 프로세스의 PCB를 대기 큐에서 꺼내서 준비 큐에 삽입)
세마포는 실행순서도 보장해준다
공유자원을 0으로 설정하고, 먼저 실행할 프로세스 뒤에 signal, 다음 실행할 프로세스 앞에 wait
이렇게 되면 나중에 실행되야하는 프로세스는 wait상태로 대기할 것이고, 먼저 실행되어야하는 프로세스가 signal을 호출해서 공유자원의 값이 다시 0이 되면 실행이 가능해진다.