Monitor

Noah·2022년 8월 5일
0

OS Study

목록 보기
11/16

지난 포스팅에서 Semaphore에 대해서 알아보았습니다.

그때 살펴본 Semaphore는 오래된 동기화 도구이기에, 이번 포스팅에서는 Java에서 사용하는 동기화 도구인 Monitor에 대해서 알아보도록 하겠습니다.

Monitor

  • 세마포어 이후 프로세스 동기화 도구의 일종

  • 세마포어보다는 고수준의 개념을 가짐

  • 구조

    • 공유자원 : Common Variable

    • 공유자원 접근 함수

    • 두 개의 큐

      • Mutual Exclusion Queue : 공유자원 접근함수에는 최대 1개의 쓰레드만이 접근할 수 있다.
        • 1개 이상이 되면 Queue에서 대기!
      • Conditional Synchronization Queue : 진입 쓰레드가 block 상태로 변경되면서 새 쓰레드가 CS에 진입할 수 있도록 하는 queue
        • 이때 진입한 새로운 쓰레드는 조건동기 queue의 block된 쓰레드를 깨울 수 있다.
        • 깨어난 쓰레드는 현재 쓰레드가 나가면 재 진입 가능!
    • Java Monitor

      • 자바의 모든 객체는 모니터가 될 수 있다.
        • Why? : heap 영역에 있는 객체는 모든 스레드에서 공유가 가능하기 때문!
      • 배타 동기 : syschronized 키워드를 사용해서 함수 앞에 지정
        • 지정할 수 있는 함수 -> 공통 자원을 사용하는 경우에만 가능
      • 조건 동기 : wait(), notify(), notifyAll() 함수 사용
        • wait() : 진입한 쓰레드를 조건 동기 queue에 블록
        • notify() : 블록된 함수를 깨움 -> 새로운 쓰레드가 실행하는 방식을 사용
        • notifyAll() : 모든 쓰레드를 깨우는 방법
 
profile
BackEnd 개발자가 되기 위해 공부중입니다!

0개의 댓글