일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 토마토
- 스프링 입문
- 우아한 테크 세미나
- C#
- Window-Via-c/c++
- 2475번
- Spring
- 열혈 tcp/ip 프로그래밍
- BOJ
- FIFO paging
- 열혈 TCP/IP 소켓 프로그래밍
- 윤성우 저자
- HTTP
- Operating System.
- n타일링2
- 에러핸들링
- OS
- Operating System
- Four Squares
- 김영한
- redis
- 10026번
- 우아한레디스
- inflearn
- 운영체제
- C++
- 스프링 핵심 원리
- 이펙티브코틀린
- 제프리리처
- TCP/IP
- Today
- Total
나의 브을로오그으
#16. 모니터(Monitors) 본문
모니터
- 모니터(Monitor)
* 세마포어 이후 프로세스 동기화 도구
* 세마포어 보다 고수준 개념
- 구조
* 공유자원 + 공유자원 접근함수
* 2개의 queues; 배타동기 + 조건동기
* 공유자원 접근함수에는 최대 1개의 쓰레드만 진입
* 진입 쓰레드가 조건동기로 블록되면 새 쓰레드 진입가능
* 새 쓰레드는 조건동기로 블록된 쓰레드를 깨울 수 있다.
* 깨워진 쓰레드는 현재 쓰레드가 나가면 재진입할 수 있다.
- 자바의 모든 객체는 모니터가 될 수 있다.
* 배타동기: synchronized 키워드 사용하여 지정
* 조건동기: wait(), notify(), notifyAll() 메소드 사용
class C {
private int value, ...;
synchronized void f() {
...
}
synchronized void g() {
...
}
void h() {
...
}
}
value를 공통변수라고 생각하고 배타동기 메서드 f(), g()에서 이 공통변수에 연산을 하는데,
하나의 쓰레드에서 f() 메소드에 접근하게 되면 다른 쓰레드에서는 f()나 g() 메서드에 접근이 불가능하다. 왜? 배타동기로 작성된 메서드이기 때문에 한번에 하나의 쓰레드만 접근을 허용한다. h()는 일반 메서드이기 때문에 다른 쓰레드에서 접근하는데에 아무 문제가 없다.
조건 동기의 경우 wait() 메서드를 호출함으로써 conditional synchronization을 위한 queue에 갇히게 하고, notify()나 notifyAll()을 통해 조건동기를 위한 queue에서 빼낸다.
- 일반적 사용 (1): Mutual exclusion
synchronizaed {
Critical-Section
}
- 예제 : BankAccount Problem
(세마포어를 이용한 상호배타 동기화를 할 때에는 initial value값을 1로 설정하고, 나오고 들어갈때 acquire(), release() 를 사용해야 했다. 번거롭다. 그런 의미에서 Monitor를 사용한 배타동기가 편리하다.
- 일반적 사용 (2): Ordering
P1 | P2 |
wait() | |
S1 | S2 |
notify() |
- 예제 : BankAccount Problem
- 입금 먼저 (= Parent 먼저)
- 출금 먼저 (= Child 먼저)
- 입금, 출금 (P, C, P, C)
전통적 동기화 예제
- Producer and Consumer Problem
* 생산자-소비자 문제
* 유한버퍼 문제
- Readers-Writers Problem
* 공유 데이터베이스 접근
- Dining Philosopher Problem
* 식사하는 철학자 문제
'Computer Science > 운영체제' 카테고리의 다른 글
#18. 메모리 절약(Main Memory Management) (0) | 2022.09.02 |
---|---|
#17. 주기억장치관리 개요(Main Memory) (0) | 2022.08.31 |
#15. 교착상태(Deadlocks) (0) | 2022.08.29 |
#14. 기타 전통적 동기화 문제 (0) | 2022.08.24 |
#13. 생산자-소비자 문제 (0) | 2022.07.09 |