delphi与api中的加一减一函数
生活随笔
收集整理的這篇文章主要介紹了
delphi与api中的加一减一函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用于增減變量的并不是常用的Inc/Dec過程,而是用了InterlockedIncrement/InterlockedDecrement這一對過程,它們實現的功能完全一樣,都是對變量加一或減一。但它們有一個最大的區別,那就是InterlockedIncrement/InterlockedDecrement是線程安全的。即它們在多線程下能保證執行結果正確,而Inc/Dec不能。或者按操作系統理論中的術語來說,這是一對“原語”操作。
以加一為例來說明二者實現細節上的不同:
一般來說,對內存數據加一的操作分解以后有三個步驟:
1、 從內存中讀出數據
2、 數據加一
3、 存入內存
現在假設在一個兩個線程的應用中用Inc進行加一操作可能出現的一種情況:
1、 線程A從內存中讀出數據(假設為3)
2、 線程B從內存中讀出數據(也是3)
3、 線程A對數據加一(現在是4)
4、 線程B對數據加一(現在也是4)
5、 線程A將數據存入內存(現在內存中的數據是4)
6、 線程B也將數據存入內存(現在內存中的數據還是4,但兩個線程都對它加了一,應該是5才對,所以這里出現了錯誤的結果)
而用InterlockIncrement過程則沒有這個問題,因為所謂“原語”是一種不可中斷的操作,即操作系統能保證在一個“原語”執行完畢前不會進行線程切換。所以在上面那個例子中,只有當線程A執行完將數據存入內存后,線程B才可以開始從中取數并進行加一操作,這樣就保證了即使是在多線程情況下,結果也一定會是正確的。
總結
以上是生活随笔為你收集整理的delphi与api中的加一减一函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 圳不完全启示录之初来乍到----2
- 下一篇: 写完程序 看 蜡笔小新 的有木有