동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다 이 과정에서 자원의 일관성을 보장해야 한다
→ 프로세스들의 동기화를 고려해야 한다
동기화란?
프로세스들의 수행 시기를 맞추는 것
Reader와 Writer 프로세스는 무작정 실행되어서는 안된다.
실행의 순서가 있기 때문
Reader 프로세스는 ‘Book.txt 안에 값이 존재한다’는 특정 조건이 만족되어야만 실행 가능
공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화
‘총합’ 변수를 공유하는 producer, consumer
생산자를 10만번, 소비자를 10만번 실행하면 ‘총합’은?
→ 전혀 예상치 못한 결과가 나온다.
ex) 63078, -13750
→ 동기화가 되지 않았기 때문에 발생한 문제
여러가지가 있지만, 몇 가지만 알아보자.
상호 배제를 위한 동기화 도구
자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
임계 구역을 잠그는 역할: acquire 함수
임계 구역의 잠금을 해제하는 역할: release 함수
바쁜 대기(busy waiting)
임계 구역 앞에서 멈춤 신호를 받으면 잠시 기다리기
임계 구역 앞에서 가도 좋다는 신호를 받으면 임계 구역 진입
사용할 수 있는 자원이 없을 경우 대기 상태로 만듦(PCB를 대기큐에 삽입)
사용할 수 있는 자원이 생겼을 경우 준비 상태로 만듦(PCB를 대기큐에서 꺼내 준비큐에 삽입)
개발자가 다루기 편리한 동기화 도구
상호 배제를 위한 동기화
실행 순서 제어를 위한 동기화