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
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.
İç içe geçmiş try blokları önlemek içi...
bir WordPress kullanmak veya sayfa bel...
Nasıl Scala desen eşleştirme koduna dü...
SQL bu SERİ ve depo desen...
Nasıl'In LMAX topu desen işe yarı...