有没有一种巧妙的方法使用Interlocked
类来做到这一点?还是应该只使用lock { }
?
我的特定用例是,我有多个线程来计算long
值,并将其与共享的“ Maximum”值进行比较,仅当本地值较大时才替换共享值。
最佳答案
尝试Interlocked.CompareExchange
方法。我没有尝试过,但是对我来说这样的事情似乎合乎逻辑:
long localMax = Interlocked.Read(ref max);
while (value > localMax) {
Interlocked.CompareExchange(ref max, value, localMax);
localMax = Interlocked.Read(ref max);
}
像往常一样,对您的代码进行压力测试以尝试捕获并发问题。
关于c# - 使用互锁测试并有条件地更新很长时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6625334/