C# 單執行緒和多執行緒下的單例模式的實現
阿新 • • 發佈:2019-01-28
該單例模式是執行緒不安全的,只能在單執行緒下執行,在多執行緒中如果被兩個執行緒同時呼叫Instance屬性時,此時兩個執行緒
判斷 if (_instance==null)時都會返回true,就會建立兩個例項。
public class Singleton{ /// <summary> /// 靜態變數(用來存放類的例項) /// </summary> static Singleton _instance; /// <summary> /// 靜態屬性(提供給外部的全域性訪問點) /// </summary> public static Singleton}}
下面這個單例是最常見的執行緒安全的,建立例項之前先進行鎖定操作,保證了只有一個執行緒可以訪問該語句塊,在鎖定操作之前先判斷是否已經建立了例項,只有當未建立例項的時候才會去進行鎖定操作,避免了頻繁的鎖定操作。
}}
該單例使用的readonly關鍵字跟static一起使用,用於指定該常量是類別級的,它的初始化交由靜態建構函式實現,並可以在執行時編譯,在這種模式下,無需自己解決執行緒安全問題,CLR會給我們解決。
public class Singleton{ /// <summary> /// 靜態變數(用來存放類的例項) /// </summary> static readonly Singleton _instance=new Singleton();/// <summary> /// 靜態屬性(提供給外部的全域性訪問點) /// </summary> public static Singleton Instance { get { return _instance; } } /// <summary> /// 私有構造方法(防止被外部例項化) /// </summary> private Singleton() {
}}