我有一个包含两个 Int32 的 Int64,如下所示:
[StructLayout(LayoutKind.Explicit)]
public struct PackedInt64
{
[FieldOffset(0)]
public Int64 All;
[FieldOffset(0)]
public Int32 First;
[FieldOffset(4)]
public Int32 Second;
}
现在我想要构造函数(对于all,first 和 second)。但是,该结构要求在退出构造函数之前分配所有字段。考虑all构造函数。
public PackedInt64(Int64 all)
{
this.First = 0;
this.Second = 0;
Thread.MemoryBarrier();
this.All = all;
}
我想绝对确定它this.All
是在构造函数中最后分配的,以便在某些编译器优化或 cpu 中的指令重新排序的情况下不会覆盖一半或更多的字段。
是否Thread.MemoryBarrier()
足够?这是最好的选择吗?