C#学习 - 关于Interlocked.CompareExchange()的用法

https://blog.csdn.net/jianhui_wang/article/details/80485517

 

Interlocked.CompareExchange有一组函数

 

 名称说明
System_CAPS_pubmethodSystem_CAPS_static CompareExchange(Double, Double, Double)

比较两个双精度浮点数是否相等,如果相等,则替换第一个值。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange(Int32, Int32, Int32)

比较两个 32 位有符号整数是否相等,如果相等,则替换第一个值。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange(Int64, Int64, Int64)

比较两个 64 位有符号整数是否相等,如果相等,则替换第一个值。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange(IntPtr, IntPtr, IntPtr)

比较两个平台特定的句柄或指针是否相等,如果相等,则替换第一个。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange(Object, Object, Object)

比较两个对象是否相等,如果相等,则替换第一个对象。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange(Single, Single, Single)

比较两个单精度浮点数是否相等,如果相等,则替换第一个值。

System_CAPS_pubmethodSystem_CAPS_static CompareExchange<T>(T, T, T)

比较两个指定的引用类型的实例 T 是否相等,如果相等,则替换第一个。

现在以 

public static int CompareExchange(
	ref int location1,
	int value,
	int comparand

)

为例说明其运算过程:

比较location1与comparand,如果不相等,什么都不做;如果location1与comparand相等,则用value替换location1的值。无论比较结果相等与否,返回值都是location1中原有的值。

用法举例:

  1.  
    while (Interlocked.CompareExchange(ref _lastRead, index + 1, index) < index)
  2.  
    {
  3.  
    }
_lastRead与index一直进行,直到相等为止,此时将_lastRead设置为 index + 1
posted @ 2019-04-10 20:31  kelelipeng  阅读(3010)  评论(0编辑  收藏  举报