本文介紹了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,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...