-
[OS] Monitor, Condition variable(조건변수)운영체제 2020. 11. 28. 04:45728x90
Monitors
공유 자원의 접근을 Monitor 객체 내부에서만 할 수 있게 제한을 둠 ( C/C++ 은 지원하지 않고, java 가 주로 모니터 기법을 사용)
Condition variable(조건변수)
mutex 간의 순서를 보장하기 위함
조건변수 x, y 를 정의
x.wait() : 이 함수를 호출한 프로세스는 대기
x.signal() : 대기중인 프로세스가 있다면 x.wait() 를 호출한 프로세스 중 하나가 실행됨. 대기중인 프로세스가 없다면 아무일도 일어나지 않음
Semaphore 의 signal() 이 항상 S++ 을 하여 그 상태에 영향을 주는것과는 다름
Signal 을 보낸다는 것은 해당 프로세스가 Lock 을 얻었음을 의미
-
Signal and wait : signal 을 주고, 내가 대기함으로서 기다리고 있던 다른 프로세스가 먼저 수행되도록 양보
-
Signal and continue : signal 을 주고, 내가 먼저 실행된 뒤에 sleep() 하여 다른 프로세스가 수행되도록 함
signal() 호출 시 어떤 프로세스가 실행될지는 구현하기에 따름 FCFS, Priority 등 여러 방법이 있음
x.wait(time) 과 같이 시간 파라미터를 추가하여 오래 대기한 프로세스를 우선순위로 쓴다거나 하는 방법도 있음 (FCFS를 Priority 로 구현)
-- Producer
x++; cond.signal(); cond.wait(); print(x);
-- Consumer
cond.wait(); x++; cond.signal();
결과 : 짝수만 출력함
'운영체제' 카테고리의 다른 글
[OS] Deadlock handling (1) (0) 2020.11.29 [OS] Deadlock 과 Resource allocation graph (0) 2020.11.29 [OS] Mutex, Semaphore 동기화, Busy waiting (0) 2020.11.28 [OS] Critical section (임계구역), test_and_set, compare_and_swap (0) 2020.11.28 [OS] 동기화와 Race condition (0) 2020.11.28 -