这是一个相对较小的问题,但我无法找到官方文档,甚至找不到关于它的博客意见/讨论。
简而言之:当我有一个私有对象,其唯一目的是为私有服务时lock
,该对象该如何命名?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
我们LockingObject
在这里应该命名什么?还不仅要考虑变量的名称,还要考虑变量在锁定时的代码外观。
我看过各种示例,但似乎没有可靠的建议:
SyncRoot
(和的各种变体形式_syncRoot
)的用法很多。- 代码示例:
lock(SyncRoot)
,lock(_syncRoot)
- 这似乎受到VB的等效
SyncLock
语句,SyncRoot
某些ICollection类上存在的属性以及某种SyncRoot设计模式的一部分的影响(这可能是一个坏主意) - 在C#上下文中,不确定是否要使用VBish命名。更糟糕的是,在VB中将变量命名为与关键字相同。不知道这是否会引起混乱。
- 代码示例:
thisLock
并lockThis
来自MSDN文章:C#lock语句,VB SyncLock语句- 代码示例:
lock(thisLock)
,lock(lockThis)
- 不知道这些名称是否仅出于示例目的而最少命名
- 如果我们在
static
类/方法中使用它,那有点奇怪。 - 编辑:关于锁的Wikipedia文章也使用此命名作为其示例
- 代码示例:
PadLock
(不同大小写的)的几种用法- 代码示例:
lock(PadLock)
,lock(padlock)
- 不错,但是我唯一的牛肉就是它毫无意外地调用了物理 “挂锁” 的图像,而我倾向于将其与抽象线程概念无关。
- 代码示例:
根据锁定意图命名锁定
- 代码示例:
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- 在VB SyncRoot MSDN页面示例中,它包含一个
simpleMessageList
带有私有messagesLock
对象的示例 - 我认为将锁命名为您要锁定的类型(“ DictionaryLock”)不是一个好主意,因为这可能会更改实现细节。我更喜欢围绕要锁定的概念/对象命名(“ messagesLock”或“ commandQueueLock”)
- 有趣的是,我很少在网上或StackOverflow上看到这种用于锁定对象的命名约定。
- 代码示例:
(编辑)“ 8.12 The Lock Statement”部分下的C#规范提供了此模式的示例并将其命名
synchronizationObject
- 代码示例:
lock(SynchronizationObject)
,lock(synchronizationObject)
- 代码示例:
问题: 您对命名私有锁定对象有何一般看法?
最近,我开始命名它们ThreadLock
(有点像选项3),但是我发现自己在问那个名字。
我在整个应用程序中经常使用这种锁定模式(在上面提供的代码示例中),因此我认为对它们的可靠命名约定进行更为专业的意见/讨论可能是有意义的。谢谢!
SynchronizationContext
是完全不同的。