[운영체제-양희재 교수님]16강 모니터
모니터(Monitor)
- 모니터
- 세마포 이후 등장한 프로세스 동기화 도구
- 현재는 동기화 도구로써 세마포보다 모니터를 더 많이 사용
- 세마포다 고수준으로 구성되어 사용하기 쉽다.
- 세마포 이후 등장한 프로세스 동기화 도구
- 구조
- 공유 자원 + 공유 자원 접근 함수 + 상호 배타를 위한 queue + 조건 동기를 위한 queue
- 공유 자원 접근 함수에는 최대 1개의 쓰레드만 진입 가능
- 진입을 대기하는 쓰레드는 상호 배타를 위한 queue에서 대기
- 진입 쓰레드가 조건 동기를 위한 queue에 갇혀 블록되면 새 쓰레드 진입 가능
wait()
- 새 쓰레드는 조건 동기로 블록된 쓰레드를 깨울 수 있다.
notify()
- 깨워진 쓰레드는 공유 자원에 접근 중인 현재 쓰레드가 나가면 재진입할 수 있다.
자바 모니터
- 자바의 모든 객체는 모니터가 될 수 있다.
상호 배타 ⇒
synchronized
키워드 사용하여 지정1 2 3
synchronized { Critical-Section }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class C { private int value, …; synchronized void f() { // 여기에는 한 개의 쓰레드만 접근할 수 있다. ... } synchronized void g() { // 여기에는 한 개의 쓰레드만 접근할 수 있다. ... } void h() { // 여기에는 여러 개의 쓰레드도 접근할 수 있다. ... } }
- 조건 동기 ⇒
wait()
,notify()
,notifyAll()
메소드 사용 Ordering
1 2 3 4
P1 P2 wait(); S1 S2 notify();
This post is licensed under CC BY 4.0 by the author.