모니터를 통해 동기화를 적극 활용하자!

박경현·2023년 9월 12일
0

저번에 race condition이 안되게 하기 위해 동기화를 한다고 작성 했었다

동기화의 방법 중 mutual exclusion, progress, bound waiting 등이 있는데

오늘은 자바에서 사용하는 lock인 모니터를 볼 거다!

저번에 내용이 이해가 된 상황이라 이번 모니터도 그렇게 어렵지는 않았다!!

모니터

말 그대로 감시(?)하다가 스레드가 자기 차례가 되면 lock을 가지고
일을 수행하게 된다!

이때 mutex과 condition variables를 사용한다!

mutex 복습과 condition variables

mutex는 첫 번째 스레드가 lock을 가지고 있다면 두 번째 스레드가 while문을
계속 락 사용가능한지 확인하는게 아닌
스레드 큐로 들어가서 자기 차례를 기다렸다가 lock을 가지고 작업을 수행하게 된다!

모니터 락에 관한 간단한 코드와 설명

acquire(m)
while(!p) {
	wait(m, cv);
}
~~~ 이런 저런 코드들
signal(cv2) or broadcast(cv2)
release(m); // 
  1. 일단 하나의 스레드가 먼저 Lock을 획득하고 작업을 수행한다!
  2. 다음에 들어온 많은 스레드는 lock을 사용 못하게 되서 wait에 들어간다!!
  3. 처음 스레드가 실행이 끝나면 release해서 대기타는 스레드가 실행된다!

이때 스레드 큐에서 대기 중인 스레드는 들어온 순서대로 실행될 수도 있지만
사용자 지정도 가능하다!!

자바에서 모니터란

자바에서는 모든 객체가 내부적으로 모니터를 가진다!
synchronized 키워드를 사용해서 mutual exclusion을 보장 받는다!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글