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