Windows核心程式設計 (五)使用者模式下執行緒同步

2021-06-29 02:06:18 字數 819 閱讀 8098

(1)原子訪問:interlocked系列函式

該系列的函式會保證對乙個值得遞增操作是原子操作,即不會被打斷。

(2)高速緩衝行

當cpu從記憶體中讀取乙個位元組的時候,它並不是從記憶體中取回乙個位元組,而是取回乙個高速緩衝行。高速緩衝行存在的目的是為了提高效能。一般來說,應用程式會對一組相鄰的位元組進行操作,如果所有位元組都在高速緩衝中,那麼cpu就不必訪問記憶體匯流排,後者耗費的時間比前者耗費的時間要多得多。

cpu讀取位元組時,將該位元組和它相鄰的位元組被讀到cpu的高速緩衝行中,這對於多處理器來說會變得非常困難。

當乙個cpu修改了高速緩衝行中的乙個位元組時,機器中的其他cpu會收到通知,並使自己的高速緩衝行作廢。

(3)高階執行緒同步

(4)關鍵段

當執行緒試圖進入乙個關鍵段時,但這個關鍵段正被另乙個執行緒占用的時候,函式會立即把呼叫執行緒切換到等待狀態,這意味著執行緒必須從使用者模式切換到核心模式(大約1000個cpu週期),這個切換的開銷非常大。

為了提高關鍵段的效能,microsoft把旋轉鎖合併到了關鍵段中,呼叫entercriticalsection的時候,會用乙個旋轉鎖不斷的迴圈,嘗試在一段時間內獲得對資源的訪問權,只有當嘗試失敗的時候,執行緒才會切換到核心模式並進入等待狀態。

(5)slim讀/寫鎖

srwlock對乙個資源進行保護,不讓其他執行緒訪問它。但與關鍵段不同的是srwlock允許我們區分那些想要讀取資源的值得執行緒(讀取者執行緒)和想要更新資源的值得執行緒(寫入者執行緒)。讓所有的讀取者執行緒在同一時刻訪問共享資源應該是可行的,這是因為僅僅讀取資源的值並不存在破壞資料的風險。只有當寫入者執行緒想要對資源進行更新的時候才需要進行同步。

(6)條件變數

《Windows核心程式設計》讀書筆記 五

第三章 核心物件 乙個核心物件就是乙個由核心分配的記憶體塊,該記憶體塊是一種資料結構,只能由該核心訪問。它的成員負責維護該物件的各種資訊,有些資料成員是所有物件型別中相同的,但大多數資料成員屬於特定的物件型別。比如訪問符號物件 事件物件 檔案物件 檔案對映物件 i o完成埠物件 作業物件 信箱物件 ...

Windows核心程式設計

內容簡介 這是一本經典的windows核心程式設計指南,從第1版到第5版,引領著數十萬程式設計師走入windows開發陣營,培養了大批精英。作為windows開發人員的必備參考,本書是為打算理解windows的c和c 程式設計師精心設計的。第5版全面覆蓋windows xp,windows vist...

《Windows核心程式設計》第五章 作業

include include include using namespace std typedef struct threadparam pthreadparam void monitorcompleteport lpvoid lpparam printf end thread success....