| process synchronization 프로세스 동기화
| concurrency control 병행제어
복습
semaphore : 추상자료형, p연산과 v연산으로 이루어어져있음
p연산 : 자원의 획득
v연산 : 자원 반환
Bounded-Buffer Problem (Process-Consumer Problem)
Reders-Writers Problem
Dining-Philosophers Problem
=> 위 세가지 모두 세마포어를 이용한 해결법
Monitor
프로그래밍 언어 차원에서, 동시 접근에 대한 문제를 해결함으로써 프로그래머의 부담을 완화
모니터 안에 공유 데이터를 정의함으로써 만약 프로세스가 공유 데이터에 접근하면 모니터를 거치도록 함. 다른 프로세스가 데이터를 점유중인 상황이면, 모니터는 다른 프로세스의 접근을 제한한다. lock-unlock을 모니터가 해줌.
예. A프로세스가 모니터 안에서 공유데이터 접근 코드 실행중일 때, B프로세스가 cpu 뺏었으면, A는 모니터 안에서 active 상태로 남아있게 되어 다른 프로세스의 접근을 막음. active = 0 이 될 때, 접근이 가능해짐. 빠져나가거나 잠들면 active = 0 됨.
=> 내부에 데이터와, 데이터 접근 코드(함수)들이 정의되어 있어 객체 지향프로그래밍에서 주로 쓰임.
condition 변수가 정의되어 있어서 빈 버퍼를 기다리게 하고, 없으면 줄서서 잠들고, 빈 버퍼있으면 내용 기다리면서 잠들어있으면 깨워라
내용 x : 줄서서 기다리면서 잠듬
내용 o : 꺼내쓰고, 다음 기다리고 있는 애 있으면 깨워라~(:consumer)
세마포어와의 비교
1. lock을 나타내는 변수 mutex가 있음 (monitor엔 없음)
2. semaphore에서도