InterLockedIncrement and InterLockedDecrement

 

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

發佈了27 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章