在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,我只是觉得我可能遗漏了一些明显的东西。我喜欢你的解决方案,我觉得很优雅!