모니터
2022. 1. 26. 16:09ㆍ학습일지
모니터란?
mutual exclusion을 보장하고, 조건에 따라 스레드를 wait 상태로 전환하게 해주는 하나의 동기화 기법이다.
모니터는 어떨 때 사용할 수 있을까?
모니터는 한 번에 하나의 스레드가 실행되어야 하며, 여러 스레드간의 협력이 필요할 때, 활용될 수 있다.
모니터의 구성요소
- mutex
- 임계 영역에서 상호 배제(mutual exclusion)을 보장하는 장치 (자세한 내용은 [저번 게시글](https://postwithmemory.tistory.com/22?category=1067725)을 참고하라.)
- 따라서 임계영역에 진입하려면, mutex lock을 취득해야 한다. 여기서 락을 획득하지 못한 스레드는 일종의 큐에 들어가 대기(waiting) 상태로 전환한다.
- 이후에, 락을 가진 스레드가 락을 반환하면, 기존에 큐에서 대기하고 있던 스레드 중 하나를 실행한다.
- 임계 영역에서 상호 배제(mutual exclusion)을 보장하는 장치 (자세한 내용은 [저번 게시글](https://postwithmemory.tistory.com/22?category=1067725)을 참고하라.)
- 하나 이상의 condition variable
- 위 항목에서 이야기한 *일종의 큐* 를 의미한다. 'waiting queue'라고도 하고, 락을 기다리는 스레드들이 대기(waiting) 상태로 머문다.
Condition Variable의 주요 동작
- wait
- cv(앞으로, condition variable을 이렇게 줄이도록 하겠다.)의 주요 동작은 'wait'으로, 락을 얻지 못하고 기다려야하는 스레드가 대기 상태가 되었을 때, cv의 대기 큐에 넣고, 대기 상태로 전환한다.
- signal
- 대기 큐에서 대기중인 스레드 중 하나를 깨운다.
- broadcast
- 대기 큐에서 대기중인 모든 스레드를 깨운다.
그러면 자바의 모니터란?
'모니터'는 결국 mutex 락을 프로그래밍 언어와 같은 고수준 언어에서 관리하는 동기화 기법이라 할 수 있다. 따라서 자바의 모니터 역시 비슷한 관점에서 구현이 된 동기화 기법인데, 자바를 통해 동기화를 진행하는 프로그래머는 모니터를 직접 구현해서 사용하지 않고도 모니터 동기화를 활용할 수 있다.
자바 모니터의 특징
- 자바는 객체 내부에 '모니터'를 하나 씩 갖추고 있다.
- 자바는 모니터의 mutual exclusion 기능은 synchronized 키워드로 사용한다.
- 자바 모니터는 하나의 condition variable을 가진다.
- 자바 모니터의 condition variable은 세가지 동작을 제공한다.
- wait
- notify (signal)
- notifyAll (broadcast)
- 자바 모니터의 condition variable은 세가지 동작을 제공한다.
'학습일지' 카테고리의 다른 글
암호 알고리즘 -1- 개요 (0) | 2022.05.10 |
---|---|
CI/CD에 대해 알아보자 (0) | 2022.02.06 |
CAP 이론에 대해 알아보자 (0) | 2022.01.23 |
멀티 프로세스/스레드 환경에서 동기화를 위한 여러 전략과 차이 (0) | 2022.01.19 |
벡터 in Java (0) | 2021.12.19 |