0

我正在使用Microsoft Unity的依賴注入(DI)。我的類基本上是靜態的(在功能上,但沒有編碼/調用約定),除了我想要DI,所以我使用Unity和構造函數來自動解析其他Unity類。統一「ContainerControlled」單身人士和多線程方法調用

由於這是一個單例模式,多個線程可以同時執行相同的代碼塊嗎?

即比方說,我有一個Add方法,它返回一個int,並作爲輸入,兩個整數...

多線程可以調用此方法添加在同一單對象上,在同一時間?或者因爲它是同一個實例,線程是否阻塞等待調用?

換句話說,調用靜態方法的方法與單例實例方法有什麼不同?

(我知道,從一個實例,該方法中使用時,必須線程安全的任何共享數據)

回答

0

沒有區別。只有當您需要保護一些共享狀態時,線程安全性纔是重要的。像你描述的方法 - 簡單的添加操作 - 獲取調用堆棧中的所有相關上下文無需保護,因此您可以在多線程環境中安全地使用它。

在功能和非功能區域中,實例方法調用和靜態方法調用當然都有區別。靜態方法被認爲比實例方法快得多,但是它們不能在多態軟件設計中有效地使用 - (至少在C#中是這樣)

+0

因此,不存在多線程調用同一實例方法的阻塞,來自同一個對象,同時,對嗎? – Novox 2014-10-19 17:40:39

+0

正確。不阻止,除非您想阻止它,在這種情況下您使用鎖定語句。 – Roman 2014-10-19 17:52:47