자바에서 사용하는 동기화는 모니터(monitor)라는 개념을 핵심적으로 사용한다.
모니터는 객체와 관련된 상호 배제 세마포어( 뮤텍스라 불린다 )에 의해 보호받는 코드들이다.
뮤텍스(mutex)의 핵심적인 개념으로 소유권(ownership)이라는 개념이 있다.
한 시점에는 오직 하나의 쓰레드만이 뮤텍스를 "소유"할 수 있다.

synchronized( obj ){
// 보호받는 코드
}

obj.my_mutex.acquire();
try{
// 보호받는 코드
}fainally{
obj.my_mutex.relesase();
}

객체를 비행기
화장실은 모니터
화장실 문의 잠금 장치 뮤텍스

class Ooops{
 double x;
 public void synchronized thelma(){
  x = 0;
 }

/**
 잘못된 구문! 원자적이지 않은 필드에 대해
 바꾸고 있음에도 불구하고 
 뮤텍스를 얻지 않고 있다.
*/
 public void louise(){  
  x= -1;
 }

어떤 규가 있을 때 하나의 쓰레드만이 모니터 안에 있을 수 있게 되는 것이다.














Posted by bloomoon iyk