我有一个包含两个Int32的Int64,就像这样:
[StructLayout(LayoutKind.Explicit)]
public struct PackedInt64
{
[FieldOffset(0)]
public Int64 All;
[FieldOffset(0)]
public Int32 First;
[FieldOffset(4)]
public Int32 Second;
}
现在我想要构造函数(对于所有,第一个和第二个)。但是这个结构体要求在离开构造函数之前必须分配所有字段。 考虑所有的构造函数。
public PackedInt64(Int64 all)
{
this.First = 0;
this.Second = 0;
Thread.MemoryBarrier();
this.All = all;
}
我希望确保在构造函数中this.All
被最后赋值,以防止编译器优化或CPU指令重新排序导致超过一半的字段被覆盖。
Thread.MemoryBarrier()
是否足够? 是否是最佳选择?