모니터 (monitor)

Rudy·2023년 9월 12일
0

모니터 (monitor)

mutual exclusion을 보장 한다
즉 여러 스레드가 객체로 동시에 객체로 접근하는 것을 막는다
조건에 따라 스레드가 대기 상태로 전환이 가능하다

모니터는 언제 사용할까?

  • 한번에 하나의 스레드만 실행돼야 할 때
    mutual exclusion을 보장이 가능 하기 때문에
  • 여러 스레드와 협업이 필요할 떄 사용한다

모니터의 구성 요소

Mutex

뮤텍스는 임계영역에서 mutual exclusion 을 보장하는 장치이다
그래서 임계영역에 진입하려면 mutex lock을 취득해야 한다 여기서
뮤텍스 lock을 취득하지 못한 스레드는 큐에 들어간 후 대기 waiting 상태로 전환 한다
뮤텍스 lock을 쥔 스레드가 lock을 반환하면 락을 기다리며 큐에 대기 상태로 있던 스레드 중 하나가 실행한다

Condition variable

waiting queue를 가지고 있다 여기서 waiting queue는 조건이 충족되길 기다리는 스레드들이
대기 상태로 머무는 곳을 말한다

주요 세가지 동작

wait: 스레드가 자기 자신을 condition variable의 waiting queue에 넣고 대기 상태로 전환
signal: waiting queue에서 대기중인 스레드 중 하나를 깨움
broadcast: waiting queue에서 대기중인 스레드 전부를 깨움

JAVA에서 모니터는 언제 사용할까?

자바에서 모든 객체는 내부적으로 모니터를 가진다

모니터의 mutual exclusion 기능은 Synchronized 키워드로 사용한다
자바의 모니터는 Condition variable하나만 가진다

자바 모니터의 세가지 동작

wait == wait
notify == signal
notifyAll == broadcast

자바 모니터를 사용할 때 두 가지 이상의 condition variable이 필요하다면 따로 구현이 필요함

profile
주니어 개발자

0개의 댓글