gpt4 book ai didi

c# - 在 C# 中命名同步对象以用于争用分析

转载 作者:行者123 更新时间:2023-11-30 15:40:57 27 4
gpt4 key购买 nike

我目前正在使用锁定对象进行同步以写入这样的集合:

private void WSMessageEnqueue(object sender, MessageClass message)
{
if (isDisconnecting == true) return;
lock (enqueueLockObject)
{
incomingMessageQueue.Enqueue(message);
}
}

其中 enqueueLockObject 是类中的一个私有(private)对象。我有几个这样的消息,因为消息由不同功能单元的不同线程排队。在争用资源管理器中,我可以看到线程命中了锁,但所有锁的名称都类似于 Handle18

Contention

是否可以为锁命名以便我可以更容易地识别它们?

最佳答案

C# 中没有可用的命名锁。您可以尝试使用 named mutex , 但它通常比 Monitor.Enter/Monitor.Exit 慢得多。

看看 link由 Mark 提供,或者您可以编写自己的类(class)。基本实现可能如下所示:

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();
}
}

关于c# - 在 C# 中命名同步对象以用于争用分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com