程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 淺談c#中使用lock的是與非

淺談c#中使用lock的是與非

編輯:C#入門知識

1、從“最簡單”的單例模式說起:
 

public class Singleton
{
    private static Singleton instance = null;
    private static readonly object syncRoot = new object();

    private Singleton()
    {
    }

    public static Singleton GetInstance()
    {
        if (instance == null)
        {
            lock (syncRoot)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

  稍微了解設計模式基礎知識的人對上面的代碼應該不會陌生。上次去面試,主考官就讓樓豬寫個單例。雖然平時已經很久沒有刻意去使用設計模式編程了,但是對於這個單例模式,咩哈哈,雖然大丈夫喜怒不形於色,但是nc樓豬當時那個意氣風發躊躇滿志運筆如飛鋒芒畢露啊,嘿嘿,中規中矩地交了如上答案。面試官看了一下肯定了兩句,話鋒一轉,問lock那裡的object實例可以直接用instance替代嗎?new一個object是否多余,可否寫成下面的形式:

public class Singleton
{
    private static Singleton instance = null;
    //private static readonly object syncRoot = new object();

    private Singleton()
    {
    }

    public static Singleton GetInstance()
    {
        if (instance == null)
        {
            lock (instance)//instance能替換syncRoot嗎?
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

  雖然在這個問題前面,面試官問的一個數據庫設計和幾個c#的小問題(有一個題樓豬當時竟然嘴硬說那是“奇技淫巧”,好怕怕)很見知識深度和修養,樓豬已經小有提防,但是這個問題還是再次讓樓豬自亂陣腳。以前從來沒人問過樓豬這個問題,樓豬也沒主動想過它,腦袋裡一片白茫茫,剛想要鎮定下來,面試官又把相同問

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved