4

如何lock基于特定的字符串键执行?

public void PerformUpdate(string key)
{
    // TODO: Refine this, since they key-string won't 
    // be the same instance between calls

    lock(key)
    {
        PerformUpdateImpl()
    }
}

我试图将锁定对象保留在 a 中ConcurrentDictionary,但不知何故这也不起作用。

4

2 回答 2

9

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

这不行吗?

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

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

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

于 2012-11-09T12:13:56.503 回答
2

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

于 2012-11-09T12:13:53.153 回答