Neden kilit nesnesi statik olmak zorunda mı? | Netgez.com
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

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • OnlyFunClips

    OnlyFunClips

    16 ÅžUBAT 2012
  • thegeniuses.tv

    thegeniuses.

    11 Aralık 2006