c# 安全執行緒 與 lock

來源:互聯網
上載者:User

如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程啟動並執行結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是安全執行緒的。
  或者說:一個類或者程式所提供的介面對於線程來說是原子操作或者多個線程之間的切換不會導致該介面的執行結果存在二義性,也就是說我們不用考慮同步的問題。
  安全執行緒問題都是由全域變數及靜態變數引起的。
  若每個線程中對全域變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域變數是安全執行緒的;若有多個線程同時對一個變數執行讀寫操作,一般都需要考慮線程同步,否則就可能影響安全執行緒。

lock的目的是防止多線程執行的時候出現並行作業問題,加上lock的參考型別的對象,在其鎖定的地區內,在一個時刻只允許一個線程操作。

lock只能鎖定一個參考型別變數,也就是鎖定一個地址

 

class Program

    {
        static void Main(string[] args)
        {
        threda t=new threda();
        threda.obj.i = 10;
        Thread th1 = new Thread(new ThreadStart(t.hhh));
        th1.Name = "th1";
        th1.Start();

        Thread th2 = new Thread(new ThreadStart(t.hhh));
        th2.Name = "th2";
        th2.Start();
        }

    }

 

class threda
    {
        public static sss obj = new sss();

        public void hhh()
        {
            lock (obj)
            {
                for (int i = 0; i < 7; i++)
                {
                    Thread.Sleep(500);
                    
                    if (obj.i >0)
                    {
                        obj.i--;
                        Console.WriteLine("當前線程名:"+Thread.CurrentThread.Name+", obj.i= " + obj.i);
                    }
                }
            }
        }
        
    }

    class sss
    {
       public int i ;
    }

 

加鎖和不加鎖啟動並執行結果有區別 :

加鎖後:i的值會一個個遞減,不會出現跳躍,不會出現重複輸出,一直到0值;

不加鎖:i的值輸出會出現跳躍,不連續遞減,可能還會出現-1值輸出;

原因:加鎖後,一個時刻只能有一個線程執行被鎖地區的代碼,兩個線程都是有先後順序執行的,所以不會出現間斷輸出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.