windows操作系統的同步機制與性能
最近看了下windows核心編程,雖然是比較老的書,但是感覺還是蠻有用的,順便複習了一些操作系統的知識,比如本文的進程同步機制
用户模式下的線程同步
線程之間需要通信:
1.需要讓多個線程同時訪問一個共享資源,同時不能破壞資源的'完整性
2.一個線程需要通知其他線程某項任務已經完成
方法一:原子訪問:Interlocked系列函數
InterlockedExchangeAdd(long & ,int );
InterlockedIncrement;
InterlockedExchange;(實現旋轉鎖是有用)
必須保證傳給這些函數的變量地址是對齊的,否則函數可能失敗
interlockde函數不需要在內核模式與用户模式之間切換
旋轉鎖:禁用線程優先級提升
多處理器的機器旋轉鎖比較有用,
關鍵段:先循環一定次數,如果還是無法訪問,線程切換至內核模式,直到資源可用
interlockedcompareexchange
方法二:關鍵段
CRITICAL_SECTION g_cs;
EnterCriticalSection(&g_cs)
…
LeaveCrititalSection(&g_cs)
關鍵段無法在多個進程之間對線程同步
方法三:Slim讀/寫鎖
和關鍵段相似,但是區分讀取線程和寫入線程
SRWLOCK
用內核對象進行線程同步
在進程內核對象內部有一個布爾變量,當系統創建內核對象的時候會把這個變量的值初始化為false(未觸發),當進程終止時,操作系統會把相應的內核對象中的值設置為true,表示已經觸發。
等待函數:WaitForSingleObject(HANDLE,DWORD)
WaitForMultipleObjects(DWORD,CONST HANDLE* ,BOOL,DWORD)
事件內核對象
讓一個線程執行初始化工作,然後出發另一個線程,讓它執行餘下的工作
createEvent()
OpenEvent()
SetEvent()//觸發時
ResetEvetn()
可等待的計數器內核對象
createWaitableTimer()
OpenwaitableTimer()
SetWaitableTimer()//觸發時
信號量
互斥量
-
windows10如何取消鎖屏界面
windows10如何取消鎖屏界面?為幫助大家解決這一疑惑,下面本站小編帶大家一起來看看詳細操作步驟,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!1、按下快捷鍵win+r,打開運行窗口,並輸入,回車。2、進入本地組策略編輯器窗口後,按序點擊打開:...
-
win10內存佔用過高的解決方法
很多小夥伴在使用win10系統的時候,關閉了所有應用後,內存使用率依舊在90%以上,下面整理了win10內存佔用過高的.解決方法,希望對大家有所幫助!解決方法1看必要條件。2關閉windowsupdate。設置後效果:內存使用率明顯下降,開機控制在2G左右,玩遊戲QQ、YY、音樂、網頁等全...
-
Unix系統用户登錄及操作命令日誌配置的方法
Unix操作系統有很多值得學習的地方,Unix系統用户登錄、操作命令日誌配置方法你瞭解多少呢?下面是相關的知識,歡迎閲讀。在SOC、審計、4A等項目中,經常需要解析Unix系統的登錄日誌,以此進行分析用户登錄行為,特別是在4A項目中,需要判定繞過堡壘主機的登錄行為及操作。...
-
初學者學習linux操作系統用什麼版本
初學者學習linux操作系統,用哪個版本比較好,能學以致用,下面是本站小編分享的一些相關資料,供大家參考。學Linux,如果你現在對windows沒什麼認識的話可能要容易學一點。如果你現在對windows比較熟悉或有較深瞭解,那可能難度要大點。我總結的經驗是,初學linux,要把自己...