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;
        }

 


免責聲明!

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



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