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

  • EvilControllers

    EvilControll

    20 Ocak 2008
  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • Crossover

    Crossover

    18 HAZİRAN 2007