如何根据特定的字符串键执行lock
?
public void PerformUpdate(string key)
{
// TODO: Refine this, since they key-string won't
// be the same instance between calls
lock(key)
{
PerformUpdateImpl()
}
}
我试图将锁定对象保留在ConcurrentDictionary
中,但不知怎的,这也不会阻止。
答案 0 :(得分:9)
虽然这不是并发的(你可以这样做),那么Dictionary<string,object>
。
这不会起作用吗?
dict.Add("somekey",new object());
lock (dict["somekey"]) {
...
}
这将允许线程锁定对象的命名实例,我认为这样做你想要的。
答案 1 :(得分:2)
我做过类似事情的一种方法是创建一个Dictionary<string,object>
并使用它来从字符串转到我锁定的对象。您可能需要确保以线程安全的方式访问此字典(例如,围绕它进行锁定),如果您需要在不同实例之间进行锁定,请将其设置为静态等等。但这是我用过的广泛技术