SORU
19 ŞUBAT 2011, CUMARTESİ


Neden kilit nesnesi statik olmak zorunda mı?

Çok yaygın çoklu iş parçacığı kilitleme için özel statik salt okunur bir nesne kullanın. Özel Giriş sarma sıkma ve bu nedenle en önemli ulaşım kilitleme nesneye işaret azaltır anlıyorum.

Ama neden durağan?

private static readonly object Locker = new object();

Sonunda alan sadece benim sınıf içinde kullanılması ve ayrıca sadece bu yerine kullanabilirim:

private readonly object Locker = new object();

Herhangi bir yorum?

GÜNCELLEME:

Örnek olarak bu kodu (sadece bir örnek) kopyaladım. Bu veya statik olmayan statik soyunma kullanabilirim ve her ikisi de iyi çalışır. Cevap aşağıda düşünürsek oldukça bu gibi dolabımı tanımlama yapmalıyım? (Üzgünüm bir görüşme önümüzdeki hafta var ve her detayı bilmek lazım :)

private readonly object Locker = new object();

Ve işte kodu:

    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

CEVAP
19 ŞUBAT 2011, CUMARTESİ


"Çoklu iş parçacığı" - daha doğrusu, ortak bir kilit kullanın . kilitleme için özel statik salt okunur bir nesne, kullanımı çok yaygın değil ^strong>uygun / seçilmiş ayrıntı. Bazen o static. Daha sık, IMO, mi - ama öyle değilörnektabanlı.

static bir kilit görürsünüz ana zaman genel veri / tek ertelenmiş yükleme için küresel bir önbellek için. Ve ikinci olarak, bunu yapmanın daha iyi yolları vardırher neyse.

Gerçekten bağlıdır: Locker senaryoda kullanılır? Bir şey koruyorsunuzkendisistatik? Eğer öyleyse, kilit statik olmalıdır. Eğer bir şeyi korumak için iseörnekgöre, o zaman kilidi IMO gerekirayrıcaörnek tabanlı olması.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • Dopelives

    Dopelives

    30 Temmuz 2009
  • MkElite

    MkElite

    13 NİSAN 2012