2010-06-25 92 views
1

考慮一類淨線程 - 將一個線程鎖定所有同步塊單個鎖定對象

private static Object _syncroot = new Object(); 

public void DoSomeWork() 
{ 
    // do some processing code 
    lock(_syncroot) 
    { 
    // process some shared data 
    } 


    // do some processing code 
    lock(_syncroot) 
    { 
    // do some further processing of shared data 
    } 

} 

中下面的代碼片段如果此代碼是由多個線程命中,如果線程A進入的第二個線程塊鎖定_syncroot,這是否也會有效鎖定任何線程進入第一個同步塊,直到線程A退出第二個同步塊?

回答

4

是的。線程A獲得的_syncRoot上的鎖定將阻止線程B獲取對同一對象的鎖定,直到線程A釋放它爲止。

如果你需要併發線程到從同一個對象讀取(這是安全的,併發寫入是事情變糟),然後看看System.Threading.ReaderWriterLockSlim

+0

感謝您的信息。 – Andrew 2010-06-25 14:44:17

+0

沒問題,只要點擊大號複選標記,如果它回答你的問題:) – STW 2010-06-25 15:26:39