SORU
8 NİSAN 2009, ÇARŞAMBA


Ne's SyncRoot kullanımı desen?

SyncRoot desen açıklayan bir c okuyorum# kitap. Gösterir

void doThis()
{
    lock(this){ ... }
}

void doThat()
{
    lock(this){ ... }
}

ve SyncRoot kıyaslanamaz desen:

object syncRoot = new object();

void doThis()
{
    lock(syncRoot ){ ... }
}

void doThat()
{
    lock(syncRoot){ ... }
}

Ancak, gerçekten farkı anlayamıyorum; her iki durumda da her iki yöntem aynı anda yalnızca bir iş parçacığı tarafından erişilebilen gibi görünüyor.

Kitap açıklar... örnek nesne de dışarıdan senkronize erişim için kullanılabilir ve kontrol edemezsiniz, çünkü bu sınıfın kendisi form, SyncRoot desen kullanabilirsiniz'Örnek nesne'? ha?

Kimse bana iki yaklaşım arasındaki farkı yukarıda olabilir?

Şimdiden teşekkürler

CEVAP
8 NİSAN 2009, ÇARŞAMBA


Eğer birden çok iş parçacığı tarafından aynı anda erişimi engellemek için, istediğiniz bir iç veri yapısı varsa, her zaman kilitleme bulunduğunuz ortak nesne olmadığından emin olun.

Bunun arkasındaki mantık ortak bir nesne herkes tarafından kilitlenebilir ve böylece kilitleme desen tam kontrol sende değil çünkü kilitlenmeleri oluşturabilirsiniz.

Bu kimse, o nesne üzerinde kilit beri this kilitleme bir seçenek değildir anlamına gelir. Aynı şekilde, dış dünyaya ortaya çıkarmak, bir şey üzerine kilitlemek gerekir.

En iyi çözüm bir iç nesne kullanmak, ve böylece ucu sadece Object kullanmak anlamına gelir.

Kilitleme veri yapıları gerçekten üzerinde tam kontrol olması gereken bir şey olduğunu, aksi takdirde işlemek için çok sorunlu olabilir deadlocking için bir senaryo kurma riski.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008