有没有一种巧妙的方法使用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/

10-11 03:27