Interlocked

Posted yy1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Interlocked相关的知识,希望对你有一定的参考价值。

Interlocked

MSDN 描述:为多个线程共享的变量提供原子操作。主要函数如下:

Interlocked.Increment    原子操作,递增指定变量的值并存储结果。
Interlocked.Decrement       原子操作,递减指定变量的值并存储结果。
Interlocked.Add        原子操作,添加两个整数并用两者的和替换第一个整数

Interlocked.CompareExchange(ref a, b, c);  原子操作,a参数和c参数比较,  相等b替换a,不相等不替换。

下面是个interlock anything的例子:

public static int Maximum(ref int target, int value)
        
            int currentVal = target, startVal, desiredVal;  //记录前后值
            do
            
                startVal = currentVal; //记录循环迭代的初始值。
                desiredVal = Math.Max(startVal, value); //基于startVal和value计算期望值desiredVal

                //高并发下,线程被抢占情况下,target值会发生改变。

                //target startVal相等说明没改变。desiredVal 直接替换。
                currentVal = Interlocked.CompareExchange(ref target, desiredVal, startVal);

             while (startVal != currentVal); //不相等说明,target值已经被其他线程改动。自旋继续。
            return desiredVal;
        

 

以上是关于Interlocked的主要内容,如果未能解决你的问题,请参考以下文章