InterLockedIncrement and InterLockedDecrement
實現數的原子性加減。什麼是原子性的加減呢?
舉個例子:如果一個變量 Long value =0;
首先說一下正常情況下的加減操作:value+=1;
1:系統從Value的空間取出值,並動態生成一個空間來存儲取出來的值;
2:將取出來的值和1作加法,並且將和放回Value的空間覆蓋掉原值。加法結束。
如果此時有兩個Thread ,分別記作threadA,threadB。
1:threadA將Value從存儲空間取出,爲0;
2:threadB將Value從存儲空間取出,爲0;
3:threadA將取出來的值和1作加法,並且將和放回Value的空間覆蓋掉原值。加法結束,Value=1。
4:threadB將取出來的值和1作加法,並且將和放回Value的空間覆蓋掉原值。加法結束,Value=1。
最後Value =1 ,而正確應該是2;這就是問題的所在,InterLockedIncrement 能夠保證在一個線程訪問變量時其它線程不能訪問。同理InterLockedDecrement。
來自:http://blog.csdn.net/dahan_wangtao/archive/2007/11/09/1875867.aspx