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