锁定字符串键

Seb*_*son 4 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图将锁定对象保留在一个ConcurrentDictionary,但不知怎的,这也不会阻止.

Llo*_*oyd 9

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

这不行吗?

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

lock (dict["somekey"]) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • 是.我说这不仅仅是展示一个概念.您可以使用.NET 4及更高版本的`ConcurrentDictionary <>`来解决这个问题. (3认同)

Chr*_*ris 2

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