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团队能够正确地获得无锁编码,并且他们可以为我提供一些方法,我可以使用他们的代码来相对轻松地编写我自己的无锁程序.我不相信自己能做到这一点.如果我需要明确使用内存屏障,这可能意味着我在努力.
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |