Çoklu iş parçacığı içinde kilitlemek için özel bir statik salt okunur nesne kullanmak çok yaygındır. Özelin, kapsüllemeyi sıkıştırarak kilit nesnesine giriş noktalarını azalttığını ve dolayısıyla en önemli olana erişim sağladığını anlıyorum.
Ama neden statik?
private static readonly object Locker = new object();
Sonunda, alan yalnızca benim sınıfımda kullanılıyor ve bunun yerine şunu da kullanabilirim:
private readonly object Locker = new object();
Herhangi bir yorum?
GÜNCELLEME:
Örnek olarak bu kodu yapıştırdım (sadece bir örnek). Bunun için statik veya statik olmayan dolap kullanabilirim ve her ikisi de iyi çalışır. Aşağıdaki cevabı göz önünde bulundurarak daha çok dolabımı böyle mi tanımlamalıyım? (Özür dilerim, önümüzdeki hafta bir röportajım var ve her ayrıntıyı bilmem gerekiyor :)
private readonly object Locker = new object();
Ve işte kod:
private int _priceA;
private int _priceB;
private EventWaitHandle[] _waithandle;
private readonly IService _service;
//ctor
public ModuleAViewModel(IService service)
{
_service = service;
_modelA = new ModelA();
_waithandle = new ManualResetEvent[2];
_waithandle[0] = new ManualResetEvent(false);
_waithandle[1] = new ManualResetEvent(false);
LoadDataByThread();
}
private void LoadDataByThread()
{
new Thread(() =>
{
new Thread(() =>
{
lock (Locker)
{
_priceA = _service.GetPriceA();
}
_waithandle[0].Set();
}).Start();
new Thread(() =>
{
lock (Locker)
{
_priceB = _service.GetPriceB();
}
_waithandle[1].Set();
}).Start();
WaitHandle.WaitAll(_waithandle);
PriceA = _priceA;
PriceB = _priceB;
}).Start();
}
Teşekkürler
_service
ve nerede _waithandle
bulunuyor? örneği? statik? diğer? Yani olabilir , örneğin, ... bir uzak sunucuya kasten senkronize erişim olmak