记忆障碍和大结构?

2 c# multithreading volatile memory-model memory-barriers

假设我有一个由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());
Run Code Online (Sandbox Code Playgroud)

内存模型是否保证在放置内存屏障后完成100字节的复制?或者内存屏障仅适用于处理器架构大小的类型?(32位为4字节,8位为64位).
这是volatile关键字仅适用于原始类型的原因吗?(如果我将一个8字节的成员声明为volatile,这意味着将使用一个互锁的instrinct来改变它的值?[因为32位机器上大于4字节的类型不能保证原子性]).

我希望我足够清楚.. :)
谢谢

Jon*_*eet 10

除非阅读线程也有内存障碍,否则我认为它对你没什么帮助.

就个人而言,我会回避:

  • 结构很大
  • 深入了解内存模型以编写无锁代码

......除非你有一个非常重要的理由这样做.这是巨大的很难得到正确与可变数据无锁的编码; 我相信即使是专家也在努力.我通常会发现"对每个访问数据的块都采取锁定"的方法更容易实现,99%的情况下性能都很好.

我相信微软的PFX团队能够正确地获得无锁编码,并且他们可以为我提供一些方法,我可以使用他们的代码来相对轻松地编写我自己的无锁程序.我不相信自己能做到这一点.如果我需要明确使用内存屏障,这可能意味着我在努力.