2

可能重复:
在 C# 中对属性的读写是原子的吗?

.NET 4 中自动生成的设置器是原子的吗?

Public property Busy As boolean
4

3 回答 3

2

他们不保证是。

考虑到上面编译为带有支持字段的完整表单属性。在 setter 调用和支持字段的实际分配之间可能会出现不同的线程。

此外,并非所有类型都可以原子分配 - 大值类型(DateTimeTimeSpan)对于原子分配来说太大了。

于 2012-09-11T09:56:59.533 回答
1

不,setter 是一种具有特殊语法的方法。Auto-Properties 是具有自动生成的 getter 和 setter 的属性。编译器生成一个底层字段,该字段由 getter 方法检索并由 setter 方法分配。

例如,

 public bool Property { get; set; }

实际上被编译成类似的东西:

private bool underlyingField;

public bool Property { 
   get { 
      return underlyingField;
   } 
   set { 
      underlyingField = value;
   }
}

一个字段可以被认为是一个原子单元,写入一个字段是一个原子操作。

于 2012-09-11T09:56:34.213 回答
1

是的,如果类型本身的分配是原子的,那么属性分配就是原子的。

setter 是一种方法,因此分配被包装在方法调用中(如果它不是内联的),但它所做的实际分配是原子的。

于 2012-09-11T09:59:57.120 回答