2011-05-02 89 views
3

在C#中,獲取非易失性屬性時是否需要鎖定?我知道在設置屬性時我們需要鎖定。如何獲得?當我們獲取C#中的屬性時,我們是否需要鎖定?#

現在3.0提供自動屬性,它本身是線程安全的嗎?

+0

可能重複[是C#自動實現靜態屬性是線程安全的?](http://stackoverflow.com/questions/2074670/are-c-auto-implemented- static-properties-thread-safe) – 2011-05-02 12:18:25

回答

4

不,automatic properties不是線程安全的。它們不過是句法糖;編譯器會自動生成專用的後備字段,就像你手動寫出它們一樣。

但是,除非您的應用程序正在從多個線程訪問屬性,否則沒有理由首先擔心這一點。從您的問題中很難判斷您的應用程序是否是多線程的。

+0

我認爲自動屬性總是線程安全的,因爲它只是返回語句。 (如果屬性類型是一個結構,我不太確定...)。不過,我認爲,你必須小心,因爲你從屬性返回的內容絕不會以任何方式抵禦併發。 – 2011-05-02 12:07:50

+0

@Mario:自動屬性不是「只有返回語句」。他們還包括一個二傳手,由於顯而易見的原因,它不是線程安全的。但即使是吸氣劑也不一定是線程安全的。 – 2011-05-02 12:10:03

+0

好的,取決於數據類型,所有可以被原子操縱的東西都是線程安全的(所以現在只有像雙打或浮動的怪物纔會出現在我的腦海裏) - 我還沒有決定使用struct ... – 2011-05-02 12:11:33

2

不可以。如果您從多個線程訪問屬性,則仍需鎖定。

4

是的。如果多個線程正在讀取/寫入同一個屬性,則必須將其鎖定。

自動屬性只不過是語法糖而不鎖定。

1

我想說,這取決於屬性的類型。如果它可以以原子方式讀取(如int或指針),則讀取是安全的。

但是,如果您通過屬性訪問對象,則多個線程可以同時訪問該對象。

但是getter/setter中的鎖也不會在這裏幫助。

心連心

馬里奧

相關問題