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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM