Относительно незначительный вопрос, но я не смог найти официальную документацию или даже мнение / обсуждение в блоге.
Проще говоря: когда у меня есть частный объект, единственная цель которого - служить частному лицу lock, как я называю этот объект?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
Что мы должны назвать LockingObjectздесь? Также учитывайте не только имя переменной, но и то, как она выглядит в коде при блокировке.
Я видел различные примеры, но, казалось бы, нет твердых советов:
Много использования
SyncRoot(и варианты, такие как_syncRoot).- Пример кода:
lock(SyncRoot),lock(_syncRoot) - Похоже, на это влияет эквивалентное
SyncLockутверждение VB ,SyncRootсвойство, которое существует в некоторых классах ICollection и часть некоторого шаблона проектирования SyncRoot (что, возможно, является плохой идеей) - Находясь в контексте C #, не уверен, хочу ли я иметь именование VBish. Хуже того, в VB именование переменной совпадает с ключевым словом. Не уверен, если это будет источником путаницы или нет.
- Пример кода:
thisLockиlockThisиз статей MSDN: оператор блокировки C # , оператор VB SyncLock- Пример кода:
lock(thisLock),lock(lockThis) - Не уверен, были ли они названы минимально чисто для примера или нет
- Довольно странно, если мы используем это в
staticклассе / методе. - РЕДАКТИРОВАТЬ: статья Википедии о замках также использует это наименование в качестве примера
- Пример кода:
Несколько использования
PadLock(различного кожуха)- Пример кода:
lock(PadLock),lock(padlock) - Неплохо, но мой единственный недостаток в том, что он неудивительно вызывает образ физического «замка», который я склонен не ассоциировать с концепцией абстрактного потока .
- Пример кода:
Называя блокировку, основываясь на том, что она собирается заблокировать
- Пример кода:
lock(messagesLock),lock(DictionaryLock),lock(commandQueueLock) - В примере страницы MSDN VB SyncRoot у него есть
simpleMessageListпример с закрытымmessagesLockобъектом - Я не думаю, что будет хорошей идеей называть блокировку для типа, который вы блокируете ("DictionaryLock"), так как это может быть изменено в деталях реализации. Я предпочитаю именовать концепцию / объект, который вы блокируете ("messagesLock" или "commandQueueLock")
- Интересно, что я очень редко вижу это соглашение об именах для блокировки объектов в примерах кода онлайн или в StackOverflow.
- Пример кода:
(РЕДАКТИРОВАТЬ) Спецификация C # в разделе "8.12 Оператор блокировки" имеет пример этого шаблона и называет его
synchronizationObject- Пример кода:
lock(SynchronizationObject),lock(synchronizationObject)
- Пример кода:
Вопрос: Каково ваше мнение вообще об именовании частных объектов запирающих?
Недавно я начал называть их ThreadLock(как вариант 3), но я сомневаюсь, что это имя.
Я часто использую этот шаблон блокировки (в приведенном выше примере кода) во всех своих приложениях, поэтому я подумал, что может иметь смысл получить более профессиональное мнение / дискуссию о твердом соглашении об именах для них. Благодарность!
SynchronizationContextэто нечто совсем другое.