변경 불가능한 데이터에 잠금 메커니즘을 제공해야하는 이유가 있습니까?변경 불가능한 데이터 및 잠금
1
A
답변
5
일반적으로 아니요. 불변의 데이터를 사용하는 주된 이점 중 하나는 데이터가 "현재"이며 사용자를 포함하여 어느 누구도 데이터를 수정할 수 있다는 암묵적인 보장이 있으므로 잠금을 피할 수 있다는 것입니다.
1
아니요, 완전히 변경 불가능한 것은 아닙니다.
3
어떤 경우에는 AcquireReadLock 메서드를 제공하기 위해 읽기 전용 인터페이스를 사용하는 것이 바람직합니다.이 인터페이스의 일부 구현에는 잠금이 필요할 수 있습니다. 인터페이스를 구현하는 불변 객체는 AcquireReadLock 요청에 대한 응답으로 반드시 필요한 것은 아니지만 적어도 그 메소드에 대한 스텁 구현을 제공해야합니다. 메소드의 사용자는, 다른 thread가 그 사이에 객체를 변경하면 바람직하지 않은 결과를 가져올 수있는 일련의 읽기를 수행하기 전에 AcquireReadLock을 호출 할 것으로 예상됩니다 (읽기 전용 인터페이스를 사용하여 객체를 변경할 수없는 경우에도 , 읽기 전용 인터페이스의 존재는 객체가 다른 방법을 통해 변경되지 않는다는 것을 의미하지는 않습니다. 또한, 다른 불변 객체가 잠금을 필요로하지 않더라도, 객체의 소비자가 잠금을 적절히 획득하고 해제한다는 것을 확인하기 위해 잠금을 "시뮬레이트"하는 옵션을 여전히 갖고 싶어 할 수 있습니다.
관련 문제
- 1. 취소 불가능한 변경 집합
- 2. 변경 불가능한 클래스 만들기
- 3. XAML에서 변경 불가능한 구조체에 바인딩
- 4. Java에서 변경 불가능한 문자열?
- 5. 변경 불가능한 NSMutableArray
- 6. 컬렉션이있는 변경 불가능한 구조체
- 7. 변경 불가능한 VMWare 이미지
- 8. 변경 불가능한 오브젝트 빌더
- 9. NET/Silverlight : 변경 불가능한 개체 및 DataContractSerializer
- 10. C#의 변경 불가능한 유형 및 속성
- 11. 스칼라 변경 불가능한 변수 및 인쇄
- 12. 컬렉션에있는 변경 불가능한 개체 (C++ 및 Qt)
- 13. Jackson JSON, 변경 불가능한 클래스 및 인터페이스
- 14. 변경 불가능한 클래스 구조 디자인
- 15. 변경 불가능한 모음을 변경 가능한 모음으로 변환
- 16. C++의 변경 불가능한 클래스
- 17. Silverlight 2의 변경 불가능한 스타일
- 18. JTextPane 변경 불가능한 텍스트 블록
- 19. F # 변경 불가능한 가변 크기 윈도우 데이터 구조
- 20. 스프링 웹 플로우 생성자를 통해 변경 불가능한 객체에 데이터 바인딩?
- 21. "불가능한"날짜 범위의 데이터 고정
- 22. 읽기 전용 (변경 불가능한) 직렬화 가능 클래스
- 23. Objective-C - 내부의 변경 불가능한 선언 - 범위 및 메모리 관리?
- 24. 변경 불가능한 인스턴스 만들기 및 관용적 인 방법으로 복사본 수정
- 25. 변경 불가능한 클래스 및 화합 응용 프로그램 블록
- 26. 잠금 화면의 텍스트 변경
- 27. 잠금 개체 변경
- 28. 화면 잠금 방식 변경
- 29. 비즈니스 응용 프로그램의 변경 불가능한 클래스
- 30. 변경 불가능한 클래스 만들기 : 무엇이 잘못 되었나요?
일반적으로? 그건 허점처럼 들리 네요. 당신은 정교 할 수 있습니까? –
@trinithis 언어, 플랫폼 또는 프레임 워크 등을 지정하지 않았기 때문에 구체적으로 설명했습니다. 스레딩 상황에서 불변의 데이터에 문제가있는 언어는 모르지만, 개인적으로 모든 사람을 사용하지 않았으므로 문을 완전히 닫아야합니다. 그러나 주요 언어의 경우 안전해야합니다 ... –