2010-06-25 93 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