.net System.MemberwiseClone和互锁写入

时间:2012-06-12 14:26:17

标签: .net atomicity interlocked

执行值类型数组的MemberwiseClone时:

 var arr = new double[100];

如果在其他线程上使用Interlocked写入修改这些双打,那么MemberwiseCloned副本是否会冒任何双重撕裂的风险?我并不担心稍微陈旧的值,只是撕裂和互锁和成员克隆之间的相互作用(我猜想转换为内存blit类型的操作?)

1 个答案:

答案 0 :(得分:1)

是。在32位操作系统上,甚至可以保证有撕裂的风险。在64位上,它是实现定义的。我不会轻易冒险,因为即使您测试它没有发生,那么您的测试仅在您的特定.NET版本和您的特定硬件上。 你无法确定。

在64位上,您可以通过实施自己的克隆版本(可能不会慢得多)来可靠地防止撕裂。