gpt4 book ai didi

c# - 修改锁定 block 中的锁定对象

转载 作者:行者123 更新时间:2023-11-30 22:49:17 26 4
gpt4 key购买 nike

我在 OLTP 应用程序中有线程争用。在查看涉及的代码时,我发现了以下内容:

        lock (_pendingTransactions)
{
transaction.EndPointRequest.Request.Key = (string)MessageComparer.GenerateKey(transaction.EndPointRequest.Request);

if (!_pendingTransactions.ContainsKey(transaction.EndPointRequest.Request.Key))
{
_pendingTransactions.Add(transaction.EndPointRequest.Request.Key, transaction);

return true;
}
else
{
return false;
}
}

正如您在代码片段中看到的,在“锁定” block 中修改的对象上有一个锁。这有什么不好的吗?有人在做这样的事情时遇到过问题吗?

最佳答案

通常不鼓励以这种方式使用锁定,建议使用专用锁定字段(类成员变量)。专用锁字段是 Object 类型,通常如下所示:

private object _pendingTransactionLock = new object();

如果对象本身有一些线程意识,这个锁变量可能属于_pendingTransaction的实现类。否则,它可能与 _pendingTransaction 一起属于该字段的声明类。

你没有说 _pendingTransaction 是什么类型。如果这是一个提供 SyncRoot 属性的内置集合类,那么锁定它可能是一个不错的选择。

请参阅 Jon Skeet 的选择要锁定的内容。

关于c# - 修改锁定 block 中的锁定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1236891/

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