2010-04-01 7 views
9

Paylaşılan bir kaynağı yöneten bir sınıf var. Şimdi, kaynağa erişim birçok parametreye bağlı olduğundan, bu sınıf, programın normal çalışması sırasında birkaç kez başlatılır ve yerleştirilir.Statik değişkeni statik olmayan bir sınıfta kilitlemek güvenli midir?

Paylaşılan kaynak eşzamanlılığı desteklemediğinden, bir tür kilitlemeye ihtiyaç vardır. Aklıma gelen ilk şey sınıfında statik örneği olan ve bunun gibi, üzerinde kilitlerin elde edilir: mantıklı

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

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

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

mı, yoksa başka bir yaklaşım kullanırsınız?

cevap

6

Evet, paylaşılan bir kaynağı korumak için statik bir değişken kullanabilirsiniz.

typeof(class) as the expression inside lock da kullanabilirsiniz. Bununla birlikte, aşağıdaki uyarıya bakın, statik değişkeni ile sınıfınıza en az daha fazla korumalıdır.

+5

Tipik (sınıf) kilitlenmezdim, çünkü aynı türde başka biri kilitlenirse bir kilitlenme alabilirsiniz. En azından, kamu türlerinde yapmayın. – driis

+1

@driis: Anlaşıldı, cevaba bir not ekledi. Teşekkürler. –

+2

+1 için "Evet yapabilirsin ...", -1 'typeof (class) 'üzerinde kilitleme önerisi için, yani bir agregat 0 – LukeH