この質問は、thisスレッドのコメントのフォローアップです。関連のないロック文の後でread命令をロックの前に移動できますか?
// (1)
lock (padlock)
{
// (2)
}
var value = nonVolatileField; // (3)
さらに、のは(2)
には命令がどのnonVolatileField
への影響およびその逆を持っていないと仮定してみましょう:
は、我々は次のコードを持っていると仮定しましょう。
読み込み命令(3)
は、ロックステートメント(1)
の前に終了するか、内部に(2)
というように並べ替えることができますか?
C#仕様(§3.10)とCLI仕様(§I.12.6.5)の何もこのような並べ替えを禁止しています。
これはthisと同じ質問ではありませんのでご注意ください。ここでは、私が理解する限り、副作用とはみなされず、弱い保証があるため、読んだ指示について具体的に尋ねています。
こんにちはジョン、このコメントスレッドを乗っ取って申し訳ありませんが、これは私の質問には良い場所のようですが、C#6または7の仕様書がどこかにありますか?私はMads Torgersenがどこかで言及したことを知っています。彼はC#6のドラフトを持っていましたが、出版してはいけません。私は、誰かがそのような文書を知っていれば、それはあなただろうと思っています:) –
@Damien_The_Unbeliever:そうです、編集します。 –
@ LasseV.Karlsen:https://github.com/ljw1004/csharpspecにC#6仕様の草案がありますが、それはちょうど草案です。 ECMAのためのC#5仕様の標準化はまだ終わっていますが、これはECMAとMSの間で調和したいと思っているように、それ以降のバージョンではノックオン効果があります。 –