【发布时间】:2009-11-13 17:30:21
【问题描述】:
假设我有一个由 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 字节的复制将完成?还是内存屏障仅适用于处理器架构大小的类型? (32 位为 4 个字节,64 位为 8 个字节)。
这就是 volatile 关键字只适用于原始类型的原因吗? (如果我将一个 8 字节的成员声明为 volatile,这意味着将使用互锁的 instrinct 来更改它的值?[因为在 32 位机器上不能保证大于 4 字节的类型的原子性])。
我希望我足够清楚.. :)
谢谢
【问题讨论】:
标签: c# multithreading volatile memory-model memory-barriers