2010-04-01 190 views
9

我有一個管理共享資源的類。現在,由於對資源的訪問依賴於許多參數,因此在正常執行程序期間,該類將被實例化並處理好幾次。在非靜態類中鎖定靜態變量是否安全?

共享資源不支持併發,所以需要某種鎖定。那我腦子裏浮現的第一件事情是有一個靜態實例中的類,並且獲取鎖就可以了,就像這樣:

// This thing is static! 
static readonly object MyLock = new object(); 

// This thing is NOT static! 
MyResource _resource = ...; 

public DoSomeWork() { 
    lock(MyLock) { 
     _resource.Access(); 
    } 
} 

這是否有意義,或者你會用另一種方法?

回答

6

是的,您可以使用靜態變量來保護共享資源。您可以使用typeof(class) as the expression inside lock。儘管如此,請參閱下面的警告,使用靜態變量,它至少可以更好地保護您的課堂。

+5

我不會鎖定typeof(class),因爲如果其他人鎖定在同一類型上,可能會發生死鎖。至少,不要使用公共類型。 – driis 2010-04-01 13:51:06

+1

@driis:同意,在答案中加了一個註釋。謝謝。 – 2010-04-01 14:01:33

+2

對於「是的,你可以......」+1,對'typeof(class)'鎖定的建議,-1,所以總數爲0. – LukeH 2010-04-01 14:27:38