gpt4 book ai didi

c# - 避免在锁内和锁外重复if语句

转载 作者:行者123 更新时间:2023-12-03 13:20:57 24 4
gpt4 key购买 nike

下面的代码是我要完成的工作的非常简化的示例。

 private object _highestLevelLock = new object();
private int _highestValue;
private void SetHighestValue()
{
var random = new Random();
var next = random.Next(0, 100);
if (next > _highestValue)
{
lock (_highestLevelLock)
{
if(next > _highestValue)
_highestValue = next;
}
}
}

即,我有一个变量,该变量保存到目前为止所遇到的最大整数。 SetHighestValue()可以由多个线程访问。

如果生成的随机整数大于当前最大的整数,我将更新_highestValue。

我的问题是,如果next> maximumValue,如何避免两次检查?如果我从锁内部将其删除,则在此线程设置该值之前,存在_highestValue设置为更高值的风险,并且在这种情况下_highestValue将不准确。

我知道我可以摆脱锁定之外的if语句,但是我不想不必要地锁定。

有没有更好的方法可以做到这一点?可能是锁定和/或使用互锁 namespace 的某种组合?

在某种程度上相关的注释上,_highestValue应该是可变的吗?即使是这样,我认为这也不会帮助我解决我的问题。

谢谢!

最佳答案

您所描述的是test and test and set的一种情况,是一种处理事情的非常有效的方法。要回答您的问题,除非将条件封装在函数中,否则就无法摆脱代码重复。

关于c# - 避免在锁内和锁外重复if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682156/

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