【发布时间】:2014-09-23 22:52:23
【问题描述】:
要将代码标记为关键部分,我们这样做:
Object lockThis = new Object();
lock (lockThis)
{
//Critical Section
}
为什么必须将对象作为锁定语法的一部分?换句话说,为什么这不能一样工作:
lock
{
//Critical Section
}
【问题讨论】:
-
正如所写,每个
lockThis都会不同,因此不会发生有效的锁定(我希望您的意思是这是一个private readonly,也许是static,字段)。需要对其进行某种范围/锁定。你提议的锁到底是什么:一个通用的东西,一个static自动生成的字段,一个实例自动生成的字段..?这些都有利有弊,强迫你明确地说出锁定对象也是如此。明确地说锁定对象具有清晰的优点,而隐式选项则没有。 -
您实际上是在问“为什么锁有钥匙?”
-
Servy - 正确,为什么锁有钥匙。蒂姆,好点子。我的意思是 lockThis 是一个私有的静态只读字段。我忘记了。
标签: c# thread-safety