2011-03-21 39 views
1

我有一個問題,我需要調用一個線程安全的方法(即一個內部使用鎖定),如果條件爲真。我正在檢查的條件讀取了多個線程(_count)之間共享的變量,所以我需要在讀取它時鎖定以避免模糊讀取。這不會導致嵌套監視器鎖定(死鎖),因爲我正在鎖定已經線程安全的方法調用?下面鎖定如果條件

例子:

lock (this) 
{ 
    if (_count <= 10) 
    { 
     _someObj.DoSomethingThreadSafe(); //this method has its only locking internally 
    } 
} 

我將如何解決這一問題?

+2

這段代碼不足以說明問題。爲什麼'DoSomethingThreadSafe'鎖定了一些東西是不好的? – mquander 2011-03-21 13:50:31

+0

他問他的外部鎖是否不會因同一個對象上的內部鎖而發生死鎖。 – 2011-03-21 13:52:10

回答

1

否,監視器可以遞歸在.NET獲取。 (Arguably this was a design mistake,但這是另一回事。同樣,我通常不建議鎖定this。我會建議使用私人蔘考,只有執行鎖定的類知道,例如private readonly object字段,除非您真的需要鎖定到其他代碼。)