2013-05-29 96 views
3

我有關於線程在c#中的問題。請參見下面的代碼。現在c#同步如何鎖定表現

public class TestThreading 
{ 
    private System.Object lockThis = new System.Object(); 

    public void Function1() 
    { 

     lock (lockThis) 
     { 
      // Access thread-sensitive resources. 
     } 
    } 

    public void Function2(){ 
     lock (lockThis) 
     { 
      // Access thread-sensitive resources. 
     } 

    } 

} 

我的問題是,如果在輸入功能1(鎖塊內)某個線程,並在同一時間的另一個線程函數2進入會發生什麼

  1. 線程將獨立執行。
  2. 函數2中輸入的線程一直等到Funtion1線程釋放鎖。
  3. 函數2中輸入的線程拋出異常。

我是新來的c#因此要求簡單的基本問題。 在此先感謝。

+0

也許這有助於http://stackoverflow.com/questions/4522128/using-the-same-lock-for-muliple-methods – V4Vendetta

回答

3

函數2中輸入的線程一直等到Funtion1線程釋放鎖。

鎖的用途就是:提供一段「安全」的代碼區域,一次只能由一個線程訪問。另一個線程將進入睡眠狀態,並在第一個線程釋放鎖時恢復。

+0

線'提供一個「安全的」代碼區域在這裏並沒有真正的幫助。這是兩個不同的地區! – Rawling

+0

@Rawling好點......如果沒有實現,很難改進,但讓我們說「安全」(序列化)訪問這兩個函數訪問的數據。應該會更好 –

1

2號會發生。第二個線程將在執行之前等待鎖釋放。