メーリングリストから、揮発性変数に対するアクションにデータ競合が含まれている場合、保証( JLSの「すべての逐次一貫性のある実行にデータ競合がない場合にのみプログラムが正しく同期される」)を適用できないというメールを受け取りました。
便宜上、元のコンテンツの一部をここに配置します。
私は揮発性変数を使用するプログラムを持っており、「プログラムは、すべての逐次一貫性のある実行にデータ競合がない場合にのみ正しく同期される」を使用して推論しようとしています。JLS3での保証。
JLS3には、プログラムにデータ競合がないことを証明できない不具合が含まれているようです。具体的には、揮発性変数Vの読み取りRと、同期順序でRの後に続くVの書き込みWについて考えます。JLS3は、RとWが競合するアクセスであると見なしているようです。さらに、RからWへのエッジの前に発生することはありません(そして当然のことながら)。したがって、JLS3はRとWもデータ競合を構成すると見なしているようです。最後になりますので、上記の保証は適用できないようです。
だからこれが私の質問です:揮発性変数に対するアクションにデータ競合が含まれている場合、なぜJLSに含まれる保証を適用できないのですか?