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