Nispeten ufak bir soru, ancak resmi belgeler bulamadım, hatta blog görüşlerini / tartışmalarını bulamadım.
Basitçe söylemek gerekirse: Tek amacı özel hizmet vermek olan özel bir nesnem olduğunda lock
, bu nesneye ne ad verebilirim ?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
LockingObject
Burada ne isimlendirmeliyiz ? Ayrıca sadece değişkenin adını değil, aynı zamanda kilitleme sırasında nasıl kod içinde göründüğünü de göz önünde bulundurun.
Çeşitli örnekler gördüm, ancak görünüşe göre sağlam bir tavsiye yok:
Bol kullanımları
SyncRoot
(ve varyasyonları gibi_syncRoot
).- Kod örnek:
lock(SyncRoot)
,lock(_syncRoot)
- Bu, VB'nin eşdeğer
SyncLock
ifadesinden,SyncRoot
bazı ICollection sınıflarında bulunan mülkten ve bir çeşit SyncRoot tasarım modelinin (muhtemelen kötü bir fikirdir) bir parçasından etkileniyor gibi görünüyor. - Bir C # bağlamda olmak, bir VBish adlandırma istiyorum emin değilim. Daha da kötüsü, VB'de değişkeni anahtar kelimeyle aynı adlandırırken. Bunun bir karışıklık kaynağı olup olmayacağından emin değilim.
- Kod örnek:
thisLock
velockThis
MSDN makalelerinden: C # lock Bildirimi , VB SyncLock Bildirimi- Kod örnek:
lock(thisLock)
,lock(lockThis)
- Bunların yalnızca örnek için minimal olarak adlandırılıp adlandırılmadığından emin değilim
- Bunu bir
static
sınıf / yöntem içinde kullanıyor olmamız biraz garip . - EDIT: Kilitler Wikipedia makalesinde örneği için bu adlandırma kullanır
- Kod örnek:
Çeşitli kullanımlar
PadLock
(değişen kasa)- Kod örnek:
lock(PadLock)
,lock(padlock)
- Fena değil, ama benim tek sığır eti şaşırtıcı bir şekilde soyut diş açma konsepti ile ilişkilendirmek eğilimindedir fiziksel bir "asma kilit" imajını çağırıyor .
- Kod örnek:
Kilidi, neyi kilitlemek istediklerine göre adlandırma
- Kod örnek:
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- VB SyncRoot MSDN sayfası örneğinde,
simpleMessageList
özelmessagesLock
nesne içeren bir örneği var - Değişebilir bir uygulama detayı olduğu için kilitlediğiniz tipe ("DictionaryLock") karşı kilidi adlandırmak iyi bir fikir olduğunu sanmıyorum. Kilitlemekte olduğunuz kavramın / nesnenin etrafında adlandırmayı tercih ederim ("messagesLock" veya "commandQueueLock")
- İlginç bir şekilde, çok nadiren çevrimiçi veya StackOverflow kod örneklerinde nesneleri kilitlemek için bu adlandırma kuralını görüyorum.
- Kod örnek:
(EDIT) "8.12 Kilit İfadesi" bölümündeki C # spesifikasyonu bu kalıba bir örnek veriyor ve ismini veriyor
synchronizationObject
- Kod örnek:
lock(SynchronizationObject)
,lock(synchronizationObject)
- Kod örnek:
Soru: Genel olarak özel kilitleme nesnelerini adlandırmak hakkında ne düşünüyorsunuz ?
Son zamanlarda, onları adlandırmaya başladım ThreadLock
(seçenek 3 gibi), ama kendimi bu ismi sorgularken buluyorum.
Uygulamalarım boyunca bu kilitleme desenini (yukarıda verilen kod örneğinde) sık sık kullanıyorum, bu yüzden onlar için sağlam bir adlandırma kuralı hakkında daha profesyonel bir fikir / tartışma almanın mantıklı olabileceğini düşündüm. Teşekkürler!
SynchronizationContext
oldukça farklı bir şey.