可能重複:
Are reads and writes to properties atomic in C#?.net中的setter原子嗎?
是自動生成的制定者在.NET 4原子?
Public property Busy As boolean
可能重複:
Are reads and writes to properties atomic in C#?.net中的setter原子嗎?
是自動生成的制定者在.NET 4原子?
Public property Busy As boolean
他們不能保證。
考慮的是,上述編譯成與背襯字段的完整形式屬性。不同的線程可能會進入setter調用和後臺字段的實際分配之間。
此外,並非所有類型都可以原子分配 - 大值類型(DateTime
,TimeSpan
等)對於原子分配而言太大。
不是。setter是一種特殊語法的方法。自動屬性是具有自動生成的獲取器和設置器的屬性。編譯器生成一個由getter方法檢索並由setter方法分配的基礎字段。
例如,
public bool Property { get; set; }
實際上被編譯成這樣的:
private bool underlyingField;
public bool Property {
get {
return underlyingField;
}
set {
underlyingField = value;
}
}
中的字段可被認爲是一個原子單元,和寫入字段是一個原子操作。
評論爲什麼這是downvoted? – smartcaveman
是的,一個屬性賦值是原子的,如果該類型本身的分配是原子。
設置器的方法,因此分配被包裹在一個方法調用(如果它不是內聯),但實際的作業,它是原子。
你是什麼意思與「原子」?任務可以發生或不發生。中間沒有任何東西。 –
@DanielHilgarth:有些任務是原子的,有些則不是。例如,分配一個「十進制」不是原子的,僅僅是因爲數據(128位)大於數據總線(32/64位)。 – Guffa
@Guffa:那麼我最終可能會得到一個十進制數,其中有一些來自賦值前的值,還有一些來自我想賦值的位?意思是我會有一個小數點,表示的值不是舊的而不是新的值? –