可能重复:
在 C# 中对属性的读写是原子的吗?
.NET 4 中自动生成的设置器是原子的吗?
Public property Busy As boolean
他们不保证是。
考虑到上面编译为带有支持字段的完整表单属性。在 setter 调用和支持字段的实际分配之间可能会出现不同的线程。
此外,并非所有类型都可以原子分配 - 大值类型(DateTime
等TimeSpan
)对于原子分配来说太大了。
不,setter 是一种具有特殊语法的方法。Auto-Properties 是具有自动生成的 getter 和 setter 的属性。编译器生成一个底层字段,该字段由 getter 方法检索并由 setter 方法分配。
例如,
public bool Property { get; set; }
实际上被编译成类似的东西:
private bool underlyingField;
public bool Property {
get {
return underlyingField;
}
set {
underlyingField = value;
}
}
一个字段可以被认为是一个原子单元,写入一个字段是一个原子操作。
是的,如果类型本身的分配是原子的,那么属性分配就是原子的。
setter 是一种方法,因此分配被包装在方法调用中(如果它不是内联的),但它所做的实际分配是原子的。