2012-07-09 4 views
0
예를 들어

,복사 생성자가 뮤텍스를 복사해야합니까?

public Foo{ 
    private Object mutex = new Object(); 
    private int bar; 

    public Foo(Foo f){ 
     this.mutex = f.getMutex(); 
     this.bar = f.getBar(); 
    } 

    public Object getMutex(){ 
     return mutex; 
    } 

    public void setBar(int bar){ 
     synchronized(mutex){ 
      this.bar = bar; 
     } 
    } 

    public int getBar(){ 
     synchronized(mutex){ 
      return bar; 
     } 
    } 
} 
+0

무엇이'f' ('f.getMutex()')입니까? –

+1

클래스의 동작 방식에 따라 다르지만 뮤텍스 데이터 멤버를 최종적으로 확실히 만듭니다. – wolfcastle

답변

3

상황에 따라 다르다 - 당신은 (정말, 얕은 복사) 두 객체가 뮤텍스를 공유 할 않거나 그들을 독립적 하시겠습니까? 대부분의 경우 나는 후자를 기대하고 있는데,이 경우에 참조를 복사하지 않을 것입니다.

1

이 경우, 다음을 모두 수행해야합니다

  1. 복사시 원본 인스턴스의 뮤텍스 뮤텍스
  2. 잠금을 복사하지 뮤텍스를 final
  3. 을 확인합니다.
관련 문제