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