在MSDN文档说,
public class SomeObject
{
public void SomeOperation()
{
lock(this)
{
//Access instance variables
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果可以公开访问实例,那就是"一个问题".我想知道为什么?是因为锁定的持有时间超过了必要的时间吗?还是有一些更阴险的原因?
我们在工作中就锁定以及究竟发生了什么进行了讨论.触发此讨论的代码是:
string name = (string)context.Cache[key];
if (String.IsNullOrEmpty(name)){
lock (typeof(string)){
name = (string)context.Cache[key];
//.. other code to get the name and then store in the cache
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这是直截了当的:在缓存中查找一个值,如果它不在那里则获取一个锁,以便在代码获取名称并将其存储在缓存中时没有其他任何中断.
我们的讨论集中在(typeof(string))是否是最好的做事方式,以及究竟是做什么的.
我的问题是lock(typeof(string))究竟做了什么?它是否创建了一个用于锁定的本地字符串,或者它是否创建了具有更大范围的内容,因此可能不安全.
根据Eric Gunnerson的说法
别
Do锁定私有变量,而不是用户可以看到的内容如果需要私钥锁定,请使用"object key = new object()"
是什么原因??