使用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 的两个实例是否相等,如果相等,则替换其中一个。

posted @ 2018-08-04 11:55  shuyisheng  阅读(154)  评论(0)    收藏  举报