Unity3d遊戲開發之-單例設計模式-單例模式二:多執行緒二(雙重鎖定)

咖哩醬_zero發表於2016-05-31

單例模式4:
多執行緒二(雙重鎖定)這種雙重鎖定考慮了執行緒安全,是正規寫法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 單例設計模式寫法
{
    /// <summary>
    /// 單例模式二:多執行緒二(雙重鎖定)這種雙重鎖定考慮了執行緒安全,是正規寫法
    /// </summary>
    public class Singleton                                            //1:定義一個public的類
    {
        private static Singleton instance;                            //2:定義一個私有的靜態變數來保持類的例項
        private static readonly object locker = new object();        //3:定義一個標示確保執行緒同步
        private Singleton() { }                                       //4:定義一個私有的靜態建構函式,使外界不能建立該類例項
        public static Singleton Instance()                            //5:定義一個public靜態的方法,提供一個全域性訪問點,同時也可以定義共有屬性來提供全域性訪問點
        {          
            if (instance ==null)                                     //6:第一次判斷類的例項是否存在,或者為空
            {
                //7:當第一個程式執行到這裡時,此時會對locker物件“加鎖”
                // ·當第二個執行緒執行該方法時,首先檢測locker物件為“加鎖”狀態,該執行緒就會掛起等待第一個執行緒“解鎖”
                // ·lock語句執行完之後(即執行緒執行完之後)會對該物件“解鎖”
                // ·雙重鎖定只需要一句判斷就可以了
                lock (locker)
                {
                    if (instance==null)                              //8:第二次判斷類的例項是否存在,或者為空
                    {
                        instance = new Singleton();                   //9:如果類的例項不存在則建立一個
                    }
                }
            }
            return instance;                                         //10:如果類的例項存在,直接返回
        }
    }
}

遊戲常用設計模式之單例設計模式的寫法大概常用的就這麼4種,zero感謝你們的支援。


相關文章