Atomic Lock的另一個選擇
在之前”並行運算”的文章中,有提到可以用Interlocked
來對整數計算提供變數上的鎖定,是除了lock
以外的選擇,但因為只有整數,在現實的情況下是不符合使用情況,尤其對於金錢上的計算,一定會有浮點數,所幸還有DotNext
這個第三方函式庫,以下是程式範例:
using DotNext;
using DotNext.Threading;
double td = 4.0;
td.UpdateAndGet(x => {
x++;
return x;
});
Console.WriteLine(td.ToString());
td.AccumulateAndGet(3, (current, v) =>
{
return current + v;
});
Console.WriteLine(td.ToString());
上述的程式碼,對於double
型別有提供擴充方法,可以使用UpdateAndGet
或AccumulateAndGet
,用哪個都可以,依實際的情況去採用即可。
參考資料