2011-11-01 7 views

답변

5

일반적으로 아니요. 불변의 데이터를 사용하는 주된 이점 중 하나는 데이터가 "현재"이며 사용자를 포함하여 어느 누구도 데이터를 수정할 수 있다는 암묵적인 보장이 있으므로 잠금을 피할 수 있다는 것입니다.

+0

일반적으로? 그건 허점처럼 들리 네요. 당신은 정교 할 수 있습니까? –

+0

@trinithis 언어, 플랫폼 또는 프레임 워크 등을 지정하지 않았기 때문에 구체적으로 설명했습니다. 스레딩 상황에서 불변의 데이터에 문제가있는 언어는 모르지만, 개인적으로 모든 사람을 사용하지 않았으므로 문을 완전히 닫아야합니다. 그러나 주요 언어의 경우 안전해야합니다 ... –

1

아니요, 완전히 변경 불가능한 것은 아닙니다.

3

어떤 경우에는 AcquireReadLock 메서드를 제공하기 위해 읽기 전용 인터페이스를 사용하는 것이 바람직합니다.이 인터페이스의 일부 구현에는 잠금이 필요할 수 있습니다. 인터페이스를 구현하는 불변 객체는 AcquireReadLock 요청에 대한 응답으로 반드시 필요한 것은 아니지만 적어도 그 메소드에 대한 스텁 구현을 제공해야합니다. 메소드의 사용자는, 다른 thread가 그 사이에 객체를 변경하면 바람직하지 않은 결과를 가져올 수있는 일련의 읽기를 수행하기 전에 AcquireReadLock을 호출 할 것으로 예상됩니다 (읽기 전용 인터페이스를 사용하여 객체를 변경할 수없는 경우에도 , 읽기 전용 인터페이스의 존재는 객체가 다른 방법을 통해 변경되지 않는다는 것을 의미하지는 않습니다. 또한, 다른 불변 객체가 잠금을 필요로하지 않더라도, 객체의 소비자가 잠금을 적절히 획득하고 해제한다는 것을 확인하기 위해 잠금을 "시뮬레이트"하는 옵션을 여전히 갖고 싶어 할 수 있습니다.

관련 문제