执行值类型数组的MemberwiseClone时:
var arr = new double[100];
如果在其他线程上使用Interlocked写入修改这些双打,那么MemberwiseCloned副本是否会冒任何双重撕裂的风险?我并不担心稍微陈旧的值,只是撕裂和互锁和成员克隆之间的相互作用(我猜想转换为内存blit类型的操作?)
答案 0 :(得分:1)
是。在32位操作系统上,甚至可以保证有撕裂的风险。在64位上,它是实现定义的。我不会轻易冒险,因为即使您测试它没有发生,那么您的测试仅在您的特定.NET版本和您的特定硬件上。 你无法确定。
在64位上,您可以通过实施自己的克隆版本(可能不会慢得多)来可靠地防止撕裂。