自动生成的setter是否在.NET 4中是原子的?
Public property Busy As boolean
答案 0 :(得分:2)
他们不能保证。
考虑以上内容编译为带有支持字段的完整表单属性。在setter调用和支持字段的实际分配之间可能会有不同的线程。
此外,并非所有类型都可以原子方式分配 - 大值类型(DateTime
,TimeSpan
等...)对于原子分配来说太大了。
答案 1 :(得分:1)
没有。 setter是一种具有特殊语法的方法。自动属性是具有自动生成的getter和setter的属性。编译器生成一个基础字段,该字段由getter方法检索并由setter方法分配。
例如,
public bool Property { get; set; }
实际上编译成如下:
private bool underlyingField;
public bool Property {
get {
return underlyingField;
}
set {
underlyingField = value;
}
}
字段可以被视为原子单元,写入字段是原子操作。
答案 2 :(得分:1)
是的,如果类型本身的赋值是原子的,则属性赋值是原子的。
setter是一个方法,因此赋值被包装在一个方法调用中(如果它没有内联),但它所做的实际赋值是原子的。