は、いくつかの方法で、このC#コードを想像してみて:コレクション初期化子を使用すると、別のスレッドが部分的に作成したコレクションを参照できますか?
SomeClass.SomeGlobalStaticDictionary = new Dictionary<int, string>()
{
{0, "value"},
};
はのは、誰も明示的なメモリバリアを使用していないか、辞書にアクセスするためにロックしているとしましょう。
最適化が行われない場合、グローバル辞書はnull(初期値)または1つのエントリを持つ適切に構成された辞書である必要があります。
質問ですが:(?またはその他の無効な部分的に構築された辞書)の追加コールの効果とSomeGlobalStaticDictionaryへの割り当ては、いくつかの他のスレッドが空のnull以外SomeGlobalStaticDictionaryを見ることになるよう並べ替えることができます
がしますSomeGlobalStaticDictionaryがvolatileであれば答えを返しますか?
http://msdn.microsoft.com/en-us/magazine/jj863136.aspx(およびその2番目の部分)を読んだ後、理論的には1つの変数がソースコードに割り当てられているという理由だけで、他のスレッドはさまざまな理由でそれを別々に見るかもしれません。 ILコードを調べましたが、問題は、SomGlobalStaticDictionaryの割り当ての前に、JITコンパイラおよび/またはCPUがAdd呼び出しの効果を他のスレッドに "フラッシュ"できないかどうかです。ローカル変数で
私は、両方の質問の答えが複数のスレッドの存在下ではイエスだと思うが、メモリモデルを十分理解しているとは思えない。 – SLaks
http://www.amazon.com/CLR-via-Microsoft-Developer-Reference/dp/0735667454 – SLaks
このコードは法的ではありません。そこに 'var'を入れてもよろしいですか?地方自治体は揮発性ではなく、名前にドットが含まれません。あなたはそれをフィールドにしようとしていますか? –