2008-09-26 8 views
3

"Dirty reads"는 Terracotta 웹 사이트의 described이고 다른 스레드에서 쓰기 잠금이되어 있어도 객체의 값을 읽는 것을 의미하지만 Terracotta의 웹 사이트에서는 전혀 사용하지 않아야한다고 들었습니다. 잠긴 객체를 더티 읽기 (dirty-read) 할 때 오래된 데이터를 얻을 수있는 가능성.테라코타에서 "더티 읽기"를 안전하게 사용할 수 있습니까?

테라코타에서 더티 읽기 경험이있는 사람이 있습니까? 이전 값을 읽을 가능성이 없다면 누구나 안전하게 사용할 수 있습니까?

답변

3

더티 읽기는 더티 읽기입니다. 분산/클러스터링되는 Terracotta는 적절한 동기화없이 액세스하는 공유 가변 상태의 이전 값까지 읽을 수있는 가능성 만 추가합니다.

Java 5의 메모리 모델에서 이 올바르게 동기화되지 않으면 업데이트 된 값을 읽어야한다는 것을 보장 할 수 없습니다. 테라코타는 이러한 가능성을 이용하기로 결정할 수 있습니다. 사실, 모든 JVM은 여가 시간에 모든 JVM을 활용할 수 있습니다. 컴퓨터에서 작동하더라도 다른 컴퓨터에서 손상 될 수 있습니다. JVM의 사소한 업데이트가 중단 될 수 있으며, 다른 CPU에서 동일한 JVM의 동일한 버전에 대해 손상 될 수 있습니다.

염두에두고, 더티 읽기가 모든 JVM에서 안전하지 않다고 말할 수 있습니다 ... 다른 스레드가 작성한 업데이트를 읽을 수 없다는 가능성을 염두에 두지 않는다면 - 있을 법하지는 않지만 상황이 발생할 수 있습니다.

또한 실제로 테라코타 위키에 대한 링크를 따라 가면 기사가 삭제되고 패턴이 사용되지 않는다고 말합니다.

+0

예, 테라코타 영업 엔지니어와의 대화 결과로 제거되었습니다. – sanity

1

저는 테라코타 개발자입니다. 대답의 요지는 Christian Vest Hansen이 이미 지적한대로입니다. JVM은 적절한 동기화를 통해 액세스되는 공유 객체의 업데이트에 대한 가시성에 대해 보장하지 않기 때문에 테라코타도 마찬가지로 더러운 읽기에 대해서는 보증하지 않습니다. 클러스터 된 오브젝트.

링크가 의도적으로 제거되었으며이 패턴을 사용하지 말라는 경고로 바뀌 었습니다.

관련 문제