糯米文學吧

位置:首頁 > 計算機 > 操作系統

windows操作系統的同步機制與性能

  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()//觸發時

信號量

互斥量