저번에 race condition이 안되게 하기 위해 동기화를 한다고 작성 했었다
동기화의 방법 중 mutual exclusion, progress, bound waiting 등이 있는데
오늘은 자바에서 사용하는 lock인 모니터를 볼 거다!
저번에 내용이 이해가 된 상황이라 이번 모니터도 그렇게 어렵지는 않았다!!
말 그대로 감시(?)하다가 스레드가 자기 차례가 되면 lock을 가지고
일을 수행하게 된다!
이때 mutex과 condition variables를 사용한다!
mutex는 첫 번째 스레드가 lock을 가지고 있다면 두 번째 스레드가 while문을
계속 락 사용가능한지 확인하는게 아닌
스레드 큐로 들어가서 자기 차례를 기다렸다가 lock을 가지고 작업을 수행하게 된다!
acquire(m)
while(!p) {
wait(m, cv);
}
~~~ 이런 저런 코드들
signal(cv2) or broadcast(cv2)
release(m); //
이때 스레드 큐에서 대기 중인 스레드는 들어온 순서대로 실행될 수도 있지만
사용자 지정도 가능하다!!
자바에서는 모든 객체가 내부적으로 모니터를 가진다!
synchronized 키워드를 사용해서 mutual exclusion을 보장 받는다!