c#中使用lock的是與非

來源:互聯網
上載者:User

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

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;
    }
}

lock 確保當一個線程位於代碼的臨界區時,另一個線程不進入臨界區。如果其他線程試圖進入鎖定的代碼,則它將一直等待(即被阻止),直到該對象被釋放。

2、最後自己總結得出的三個結論:
a、c#中null是不能lock的(null會分配記憶體嗎,會佔用系統資源嗎?一起思考和探討吧)。
b、高手一出手,往往可以化腐朽為神奇。
c、對自己說:
加油。

3.在多解決方面下唯一的對象>單例模式實現

唯一對象

 1   public class CardReaderHelper
2 {
3 #region 單例模式
4
5 static CardReaderHelper instance;
6 static object _lock = new object();
7
8 public static CardReaderHelper Instance
9 {
10 get
11 {
12 if (instance == null)
13 {
14 lock (_lock)
15 {
16 if (instance == null)
17 {
18 instance = new CardReaderHelper();
19 }
20 }
21 }
22 return instance;
23 }
24 }
25
26 #endregion
27
28 RFCardReader m_CardReader;
29 SerialPort sp;
30 BaudRate br;
31
32 CardReaderHelper()
33 {
34 this.Initialize();
35 }
36
37 void Initialize()
38 {
39 string strapp = EAS.Configuration.Config.GetValue("ComPort");
40 switch (strapp)
41 {
42 case "COM1": sp = RHDC.CardReader.SerialPort.COM1; break;
43 case "COM2": sp = RHDC.CardReader.SerialPort.COM2; break;
44 case "COM3": sp = RHDC.CardReader.SerialPort.COM3; break;
45 case "COM4": sp = RHDC.CardReader.SerialPort.COM4; break;
46 default: sp = RHDC.CardReader.SerialPort.COM1; break;
47 }
48 string baudRate = EAS.Configuration.Config.GetValue("BaudRate");
49 switch (baudRate)
50 {
51 case "115200": br = RHDC.CardReader.BaudRate._115200bps; break;
52 case "57600": br = RHDC.CardReader.BaudRate._57600bps; break;
53 case "38400": br = RHDC.CardReader.BaudRate._38400bps; break;
54 case "19200": br = RHDC.CardReader.BaudRate._19200bps; break;
55 case "14400": br = RHDC.CardReader.BaudRate._14400bps; break;
56 case "9600": br = RHDC.CardReader.BaudRate._9600bps; break;
57 default: br = RHDC.CardReader.BaudRate._115200bps; break;
58 }
59 try
60 {
61 m_CardReader = new RHDC.CardReader.RFCardReader(sp, br);
62 }
63 catch (Exception ex)
64 {
65 throw ex;
66 }
67
68 }
69
70 public RHDC.CardReader.RFCardReader CardReader
71 {
72 get
73 {
74 return m_CardReader;
75 }
76 }
77 }

此寫法可以用於一個大項目下多個解決方案之間通訊!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.