我们在工作中讨论了锁定以及究竟发生了什么。引发此讨论的代码是:
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
}
}
我认为这是直截了当的:在缓存中查找一个值,如果它不存在,则获取一个锁,以便在代码获取名称并将其存储在缓存中时没有其他任何中断。
我们的讨论集中在 (typeof(string)) 是否是最好的做事方式,以及究竟是什么。
我的问题是 lock(typeof(string)) 到底是做什么的?它是创建一个用于锁定的本地字符串,还是创建具有更广泛范围的东西,因此可能不安全。