在c#中命名同步对象以用于竞争分析
我目前正在使用锁定对象进行同步,以写入集合,如下所示:在c#中命名同步对象以用于竞争分析,c#,multithreading,visual-studio-2010,locking,C#,Multithreading,Visual Studio 2010,Locking,我目前正在使用锁定对象进行同步,以写入集合,如下所示: private void WSMessageEnqueue(object sender, MessageClass message) { if (isDisconnecting == true) return; lock (enqueueLockObject) { incomingMessageQueue.Enqueue(message); }
private void WSMessageEnqueue(object sender, MessageClass message)
{
if (isDisconnecting == true) return;
lock (enqueueLockObject)
{
incomingMessageQueue.Enqueue(message);
}
}
其中,enqueueLockObject
是类中的私有对象。我有几条这样的消息,因为消息由不同的线程为不同的功能单元排队。在争用资源管理器中,我可以看到线程命中锁,但是锁的名称都像Handle18
有没有可能给锁命名以便我能更容易地识别它们?在c#中没有可用的命名锁。您可以尝试使用,但它通常比Monitor.Enter/Monitor.Exit慢得多
看看Mark提供的,或者你也可以编写你自己的类。基本实现可能如下所示:
public class NamedSyncRoot
{
private object _syncRoot;
public string Name { get; private set; }
public NamedSyncRoot(string name)
{
Name = name;
_syncRoot = new object();
}
public void Lock()
{
Monitor.Enter(_syncRoot);
}
public void Unlock()
{
Monitor.Exit(_syncRoot);
}
}
public class Foo
{
private static NamedSyncRoot namedLock = new NamedSyncRoot("Foo");
public void Bar()
{
namedLock.Lock();
//...
namedLock.Unlock();
}
}
IIRC Jon Skeet在MiscUtil中有一个命名锁的包装器:谢谢oleksii,我只是觉得我可能遗漏了一些明显的东西。我喜欢你的解决方案,我觉得很优雅!