我在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;
}
}
正如你可以在摘要中看到,有可能是“锁”块中修改的对象上的锁。那有什么不好吗?任何人都有这样的问题吗?