我在C#中使用了lock语句来专门执行一段代码。有没有办法根据密钥做同样的事情。
例如:
lock(object, key)
{
//code-here
}
我有一个方法,它有一些不是线程安全的代码,但只有在两个并行执行中密钥(字符串)碰巧相同时才会这样。有没有办法以某种方式在.NET中实现这一点?
如果存在某种方式,那么如果在并行执行中使用的密钥不同并且可以提高性能,我们就可以进行并行执行。
答案 0 :(得分:3)
将锁定对象放入由密钥索引的字典中 - Dictionary<string, object>
并按键抓取对象以锁定。
如果需要动态添加新的键/锁对象,请确保锁定字典访问,否则如果在构造之后只读取字典中的值,则不需要额外的锁定。