문제

다른 스레드에 의해 쓰기로 인해 객체의 값을 읽는다는 것을 의미하는 "Dirty Reads"는 설명 Terracotta의 웹 사이트에서, 나는 당신이 잠긴 물체를 더럽게 읽을 때 오래된 데이터를 얻을 가능성에 관심이 없더라도 사용해서는 안된다고 들었습니다.

누구든지 테라코타에서 Dirty Reads를 사용한 경험이 있습니까? 오래된 가치를 읽을 가능성에 관심이 없다면 사용하기에 안전합니까?

도움이 되었습니까?

해결책

더러운 읽기는 더러운 읽기입니다. 분산/클러스터 인 Terracotta는 적절한 동기화없이 액세스 할 수있는 공유 된 돌연변이 상태의 이전 값을 읽을 수있는 가능성 만 추가합니다.

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

이를 염두에두고 Dirty Reads는 JVM에서 안전하지 않다고 말할 수 있습니다. 다른 스레드가 만드는 업데이트를 읽을 수 없을 가능성이 없다면 상황이 가능성이 거의 없지만 상황이 가능성이 거의 없을 가능성이 없습니다. 일어날 수 있습니다.

또한 실제로 Terracottas Wiki에 대한 링크를 따르면 기사가 제거되었고 패턴이 권장되지 않았다고합니다.

다른 팁

저는 테라코타 개발자입니다. 답의 요점은 Christian Vest Hansen이 이미 언급 한 것과 마찬가지로 JVM이 적절한 동기화없이 액세스하는 공유 객체의 업데이트 가시성에 대해 보장하지 않는 것처럼, Terracotta는 마찬가지로 더러운 읽기에 대해 보장 할 수 없습니다. 클러스터 된 객체.

링크는 실제로 의도적으로 제거 되어이 패턴을 사용하지 않도록 경고로 대체되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top