锁定字符串键

时间:2012-11-09 12:10:00

标签: c# locking

如何根据特定的字符串键执行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中,但不知怎的,这也不会阻止。

2 个答案:

答案 0 :(得分:9)

虽然这不是并发的(你可以这样做),那么Dictionary<string,object>

这不会起作用吗?

dict.Add("somekey",new object());

lock (dict["somekey"]) {
  ...
}

这将允许线程锁定对象的命名实例,我认为这样做你想要的。

答案 1 :(得分:2)

我做过类似事情的一种方法是创建一个Dictionary<string,object>并使用它来从字符串转到我锁定的对象。您可能需要确保以线程安全的方式访问此字典(例如,围绕它进行锁定),如果您需要在不同实例之间进行锁定,请将其设置为静态等等。但这是我用过的广泛技术