別のスレッドによって書き込みロックされているにもかかわらずオブジェクトの値を読み取ることを意味する「ダーティリード」は、 TerracottaのWebサイトに記載されていますが、可能性を気にしない場合でも、使用すべきではないと聞いています。ロックされたオブジェクトをダーティリードすると、古いデータが取得される可能性があります。
Terracottaでダーティリードを使用した経験のある人はいますか?古い値を読み取る可能性を気にしない場合は、安全に使用できますか?
別のスレッドによって書き込みロックされているにもかかわらずオブジェクトの値を読み取ることを意味する「ダーティリード」は、 TerracottaのWebサイトに記載されていますが、可能性を気にしない場合でも、使用すべきではないと聞いています。ロックされたオブジェクトをダーティリードすると、古いデータが取得される可能性があります。
Terracottaでダーティリードを使用した経験のある人はいますか?古い値を読み取る可能性を気にしない場合は、安全に使用できますか?
ダーティリードはダーティリードです。分散/クラスター化されているTerracottaは、適切な同期なしでアクセスしている共有可変状態のさらに古い値を読み取る可能性を追加するだけです。
Java 5のメモリモデルでは、適切な同期を使用しない場合、更新された値を読み取ることが保証されないことに注意してください。テラコッタはこの可能性を利用することを決定するかもしれません。実際、どのJVMでも、自由にそれを利用できます。自分のマシンで動作する場合でも、他のマシンでは破損する可能性があります。JVMのマイナーアップデートで破損する可能性があり、異なるCPU上の同じJVMの同じバージョンで破損する可能性があります。
そのことを念頭に置いて、ダーティ読み取りはどのJVMでも安全ではないと言うことができます...他のスレッドが行う更新を読み取ることができない可能性を気にしない限り、ありそうもない状況ですがそれは起こり得る。
また、実際にTerracottas wikiへのリンクをたどると、記事が削除され、パターンが推奨されていないことが示されます。
私は Terracotta 開発者です。答えの要点は、Christian Vest Hansen がすでに述べたとおりです。JVM が適切な同期なしでアクセスされる共有オブジェクトの更新の可視性について保証しないのと同じように、Terracotta も同様に、オブジェクトのダーティ リードについて保証できません。クラスター化されたオブジェクト。
実際、リンクは意図的に削除され、このパターンを使用しないようにという警告に置き換えられています。