2

重複の可能性:
C#のプロパティへの読み取りと書き込みはアトミックですか?

自動生成されたセッターは.NET4でアトミックですか?

Public property Busy As boolean
4

3 に答える 3

2

保証されているわけではありません。

上記は、バッキングフィールドを持つ完全なフォームプロパティにコンパイルされることを考慮してください。セッターの呼び出しとバッキングフィールドの実際の割り当ての間に、異なるスレッドが入る可能性があります。

また、すべての型をアトミックに割り当てることができるわけではありません。大きな値の型(など)はDateTimeTimeSpanアトミックな割り当てには大きすぎます。

于 2012-09-11T09:56:59.533 に答える
1

いいえ。セッターは特別な構文を持つメソッドです。自動プロパティは、自動生成されたゲッターとセッターを備えたプロパティです。コンパイラーは、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

はい、タイプ自体の割り当てがアトミックである場合、プロパティの割り当てはアトミックです。

セッターはメソッドであるため、割り当てはメソッド呼び出しでラップされます(インライン化されていない場合)が、実際に行われる割り当てはアトミックです。

于 2012-09-11T09:59:57.120 に答える