使用Interlocked进行线程同步
在多线程程序开发中经常用到原子操作的变量自增(Increment)、自减(Decrement)或值改变(Exchange)的操作。如果不进行同步,你可能得不到正确的结果,通过同步操作来保证数据的正确执行。
Interlocked类主要提供有以下原子操作方法:
Interlocked.Add(ref int intNumber,int value);
对两个 32 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。
Interlocked.Increment(ref int intNumber);
以原子操作的形式递增指定变量的值并存储结果。
Interlocked.Decrement(ref int intNumber);
以原子操作的形式递减指定变量的值并存储结果。
Interlocked.Read(ref long intNumber);
返回一个以原子操作形式加载的 64 位值。
Interlocked.Exchange(ref intNumber1, int intNumber2);
以原子操作的形式,将 32 位有符号整数设置为指定的值(intNumber2)并返回原始值(intNumber1)。
Interlocked.Exchange<T>(ref T Location, T value)
以原子操作的形式,将指定类型 T 的变量设置为指定的值(value)并返回原始值(Location)。注意T必须是引用类型。
Hide Copy Code
Interlocked.CompareExchange(ref int intNumber1,int intNumber2,int CompareValue);
比较两个 32 位有符号整数是否相等,如果相等,则替换其中一个值。其值(intNumber1)将与 CompareValue 进行比较并且可能被替换的目标。比较结果相等时替换intNumber1的值
Hide Copy Code
Interlocked.CompareExchange<T>(ref T Location, T Value, T CompareValue);
比较指定的引用类型 T 的两个实例是否相等,如果相等,则替换其中一个。
浙公网安备 33010602011771号