01 自旋鎖

1、不同版本的內核文件
單核:
ntkrnlpa.exe 2-9-9-12分頁
ntoskrnl.exe 10-10-12分頁
多核:
ntkrnlpa.exe 2-9-9-12分頁
ntoskrnl.exe 10-10-12分頁
單核跟多核中的相同名的文件裏面的代碼不一樣

2、Windows自旋鎖
參考:KeAcquireSpinLockAtDpcLevel
只要包含SpinLock都是和自旋鎖相關的API
關鍵代碼:

 lock bts qword ptr [rcx], 0 //如果lock bts qword ptr [rcx], 1 則是將第1位置1

lock是鎖前綴,保證這條指令在同一時刻,只能有一個CPU訪問
bts指令:設置並檢測, 將rcx指向的數據的第0位置1,如果 [rcx]的值等於0,那麼CF = 1,否則CF = 0
自旋鎖由來因爲 pause指令

3、總結:
<1>自旋鎖只對多核有意義
<2>自選所與臨界區一樣、事件、互斥體一樣,都是一種同步機制,都可以讓當前線程處於等待狀態,區別在於自旋鎖不用切換線程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章