c SingleTon的執行緒安全(存檔)

2021-04-28 07:37:53 字數 1192 閱讀 3672

本文介紹了c#下關於單例的三種實現方法。

最普通的一種:

軟體開發網

以下是引用片段:

using system;

public class singleton

public static singleton instance}}

軟體開發網

這種方案在.net下面是執行緒不安全的,每個執行緒進來會建立不同的型別例項。

下面是一種在.net公共語言執行環境下的執行緒安全單例實現模式:

以下是引用片段:

它是依靠公共語言執行時的能力來構造的執行緒安全模式,在別的語言環境中是不適用的。

基於此加上.net對泛型的支援,我們可以做乙個通用的泛型單例provider,**如下:

以下是引用片段:

public class singletonprovider where t : new()

public static t instance

}class singletoncreator

internal static readonly t instance = new t();}}

在此應用下,單例的例項由clr保證只在首次引用它時才會被建立。

當它不能滿足需要時,比如:你需要在建構函式中做一些其它的操作完成初始化的話,那麼就可以考慮使用double-checkedlocking模式來實現。

乙個線執行緒安全的單例:

以下是引用片段:

using system;

public sealed class singleton

public static singleton instance

}return instance;}}

} 需要注意的時,這裡鎖定的是syncroot,而不是本身,這可以避免產生死鎖。

在其它的語言環境中,double-checkedlocking不一定能正常工作,這是由於編譯器本身的問題產生的,所以上面的實現方法並不一定適用於其它的語言環境。

c singleton 單例類的實現

單例設計模式是一種軟體設計原理,用於將類的例項化限制為最多乙個物件。當僅需要乙個物件來協調整個系統中的運作時,單例模式就很有用。例如,如果您使用的是將日誌寫入檔案的記錄器,則可以使用單例類建立此類記錄器。class singleton singleton const singleton delete...

執行緒安全與非執行緒安全的區別

執行緒安全 是多執行緒訪問時,採用加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。非執行緒安全 是多執行緒訪問時,不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。所得資料...

執行緒安全(常用的執行緒安全類)

string中的stringbuffer list集合中的vector copyonwritearraylist reentrantlock lock鎖 是執行緒安全的arraylist vector是增刪改查方法都加了synchronized,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...