比如:
if(cache["key"]==null)
{
lock(this)
cache.Insert("key",func())
}
这边的func 是有返回结果的一个委托
代码大概是这么一个逻辑,但是如果其中有一个key的委托如果执行很久的话,那不是其他地方的缓存都要等这个委托执行完,那不是我不需要访问这个缓存的也要等这个委托执行完把lock解开,不知道有没有办法可以就是各个不同名称的缓存的lock互不受影响
不建议用lock,即时同时插入缓存,也不会有问题,缓存服务器一般会处理这程情况。使用lock反而会带来性能问题。
那你就需要lock不同的锁,不如我有2个角色,需要修改信息,这2个觉得都有guid这个唯一标示,
这个时候,我可以lock(string.Intern(guid.tostring()))
do somethings。这样的话就单独的lock各自的对象。
可以先了解一下啊string.intern这个方法。