windows操作系統(tǒng)的同步機制與性能
windows操作系統(tǒng)的同步機制與性能
最近看了下windows核心編程,雖然是比較老的書,但是感覺還是蠻有用的,順便復習了一些操作系統(tǒng)的知識,比如本文的進程同步機制
用戶模式下的線程同步
線程之間需要通信:
1.需要讓多個線程同時訪問一個共享資源,同時不能破壞資源的.完整性
2.一個線程需要通知其他線程某項任務已經完成
方法一:原子訪問:Interlocked系列函數
InterlockedExchangeAdd(long & ,int );
InterlockedIncrement;
InterlockedExchange;(實現(xiàn)旋轉鎖是有用)
必須保證傳給這些函數的變量地址是對齊的,否則函數可能失敗
interlockde函數不需要在內核模式與用戶模式之間切換
旋轉鎖:禁用線程優(yōu)先級提升
多處理器的機器旋轉鎖比較有用,
關鍵段:先循環(huán)一定次數,如果還是無法訪問,線程切換至內核模式,直到資源可用
interlockedcompareexchange
方法二:關鍵段
CRITICAL_SECTION g_cs;
EnterCriticalSection(&g_cs)
…
LeaveCrititalSection(&g_cs)
關鍵段無法在多個進程之間對線程同步
方法三:Slim讀/寫鎖
和關鍵段相似,但是區(qū)分讀取線程和寫入線程
SRWLOCK
用內核對象進行線程同步
在進程內核對象內部有一個布爾變量,當系統(tǒng)創(chuàng)建內核對象的時候會把這個變量的值初始化為false(未觸發(fā)),當進程終止時,操作系統(tǒng)會把相應的內核對象中的值設置為true,表示已經觸發(fā)。
等待函數:WaitForSingleObject(HANDLE,DWORD)
WaitForMultipleObjects(DWORD,CONST HANDLE* ,BOOL,DWORD)
事件內核對象
讓一個線程執(zhí)行初始化工作,然后出發(fā)另一個線程,讓它執(zhí)行余下的工作
createEvent()
OpenEvent()
SetEvent()/pic/p>
ResetEvetn()
可等待的計數器內核對象
createWaitableTimer()
OpenwaitableTimer()
SetWaitableTimer()/pic/p>
信號量
互斥量
【windows操作系統(tǒng)的同步機制與性能】相關文章:
Windows XP操作系統(tǒng)內存性能優(yōu)化11-20
Windows操作系統(tǒng)的特點02-09
什么是windows操作系統(tǒng)10-30
什么是windows操作系統(tǒng)12-17