100 バイトで構成される構造体があるとします。次のコードについてどのような保証がありますか?
m_myLargeStruct = someValue; // copying 100 bytes
Thread.MemoryBarrier();
// Executed by another thread, after "Thread.MemoryBarrier" was called by the first thread
Console.WriteLine(m_myLargeStruct.ToString());
メモリ モデルは、メモリ バリアの配置後に 100 バイトのコピーが完了することを保証しますか? またはメモリバリアは、プロセッサのアーキテクチャのサイズの型にのみ適用されますか? (32bit の場合は 4 バイト、64bit の場合は 8 バイト)。これがvolatileキーワードがプリミティブ型にのみ適用される
理由ですか? (8 バイトのメンバーを volatile として宣言すると、インターロックされた命令を使用してその値を変更することになりますか?[32 ビット マシンでは 4 バイトを超える型の原子性は保証されないため])。
私は十分に明確だったと思います.. :)
ありがとう