在這個架構中,我決定要盡量減少許多封裝型的同步API(Synchronization API)的使用
e.g.
原因在於它們往往需要通過Windows內部許多的機制來解決同步問題,如此一來需要占用一小段時間
為了使用簡單的同步API達成同步問題,我嘗試大量採用InterlockedXXXXXX系列API
它們透過CPU的指令集中的lock對總線進行控制,讓CPU在執行這行指令時,不會被打斷(不管是中斷還是多核CPU問題),解決同步問題
我認為InterlockedCompareExchange給我不少幫助,它可以先將目標資料跟比對資料比對後,如果相等,則將取代資料存入目標資料中,反之沒有動作
如此一來,當兩個Thread會同時搶著修改一個資源時,可以在資源加入一個Status標誌,表示當前是否有人已經先占用,如果發現它等於未被人占用狀態值,則將它修改為占用狀態值,並且進行處理,InterlockedCompareExchange剛好可以將上述兩個動作合在一個指令完成,並且透過lock的保護,確保不會兩個Thread不會同時檢查跟修改Status標誌
No comments:
Post a Comment