當前位置:才華齋>計算機>作業系統>

windows作業系統的同步機制與效能

作業系統 閱讀(8.48K)
  windows作業系統同步機制與效能

最近看了下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()//觸發時

訊號量

互斥量