資源描述:
《操作系統(tǒng)實驗-線程的同步》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗六線程的同步1、實驗?zāi)康模?)進一步掌握Windows系統(tǒng)環(huán)境下線程的創(chuàng)建與撤銷。(2)熟悉Windows系統(tǒng)提供的線程同步API。(3)使用Windows系統(tǒng)提供的線程同步API解決實際問題。2、實驗準(zhǔn)備知識:相關(guān)API函數(shù)介紹①等待對象等待對象(waitfunctions)函數(shù)包括等待一個對象(WaitForSingleObject())和等待多個對象(WaitForMultipleObject())兩個API函數(shù)。1)等待一個對象WaitForSingleObject()用于等待一個對象。它等待的對象可以為以
2、下對象之一?!hangeontification:變化通知?!onsoleinput:控制臺輸入?!vent:事件?!ob:作業(yè)?!utex:互斥信號量?!rocess:進程?!emaphore:計數(shù)信號量?!hread:線程?!aitabletimer:定時器。原型:DWORDWaitForSingleObject(HANDLEhHandle,//對象句柄DWORDdwMilliseconds//等待時間);參數(shù)說明:(1)hHandle:等待對象的對象句柄。該對象句柄必須為SYNCHRONIZE訪
3、問。(2)dwMilliseconds:等待時間,單位為ms。若該值為0,函數(shù)在測試對象的狀態(tài)后立即返回,若為INFINITE,函數(shù)一直等待下去,直到接收到一個信號將其喚醒,如表2-1所示。返回值:如果成功返回,其返回值說明是何種事件導(dǎo)致函數(shù)返回。表2-1函數(shù)描述訪問描述WAITABANDONED等待的對象是一個互斥(Mutex)對象,該互斥對象沒有被擁有它的線程釋放,它被設(shè)置為不能被喚醒WAITOBJECT0指定對象被喚醒WAITTIMEOUT超時用法舉例:StaticHANDLEhHandlel=NULL;DWOR
4、DdRes;dRes=WaitForSingleObject(hHandlel,10);//等待對象的句柄為hHandlel,等待時間為10ms1)等待對個對象WaitForMultiple()bject()在指定時間內(nèi)等待多個對象,它等待的對象與WaitForSingleObject()相同。原型:DWORDWaitForMultipleObjects(DWORDnCount,//句柄數(shù)組中的句柄數(shù)CONSTHANDLE*lpHandles,//指向?qū)ο缶浔鷶?shù)組的指針BOOLfWaitAll,//等待類型DWORDd
5、wMilliseconds//等待時間);參數(shù)說明:(1)nCount:由指針*lpHandles指定的句柄數(shù)組中的句柄數(shù),最大數(shù)是MAXIMUMWAITOBJECTS。(2)*lpHandles:指向?qū)ο缶浔鷶?shù)組的指針。(3)fWaitAll:等待類型。若為TRUE,當(dāng)由lpHandles數(shù)組指定的所有對象被喚醒時函數(shù)返回;若為FALSE,當(dāng)由lpHandles數(shù)組指定的某一個對象被喚醒時函數(shù)返回,且由返回值說明是由于哪個對象引起的函數(shù)返回。(4)dwMilliseconds:等待時間,單位為ms。若該值為0,函數(shù)測
6、試對象的狀態(tài)后立即返回;若為INFINITE,函數(shù)一直等待下去,直到接收到一個信號將其喚醒。返回值:、如果成功返回,其返回值說明是何種事件導(dǎo)致函數(shù)返回。各參數(shù)的描述如表2-2所示。表2-2各參數(shù)描述訪問描述WAITOBJECT0to(WAITOBJECT0+nCount-1)若bWaitAll為TRUE,返回值說明所有被等待的對象均被喚醒;若bWaitAll為FALSE,返回值減去WAITOBJECT0說明lpHandles數(shù)組下標(biāo)指定的對象滿足等待條件。如果調(diào)用時多個對象同時被喚醒,則取多個對象中最小的那個數(shù)組下標(biāo)W
7、AITABANDONED0to(WAITABANDONED0+nCount-1)若bWaitAll為TRUE,返回值說明所有被等待的對象均被喚醒,并且至少有一個對象是沒有約束的互斥對象;若bWaitAll為FALSE,返回值減去WAITABANDONED0說明lpHandles數(shù)組下標(biāo)指定的沒有約束的互斥對象滿足等待條件WAITTIMEOUT超時且參數(shù)bWaitAll指定的條件不能滿足①信號量對象(Semaphore)信號量對象(Semaphore)包括創(chuàng)建信號量(CreateSemaphore())、打開信號量(Op
8、enSemaphore())及增加信號量的值(ReleaseSemaphore())API函數(shù)。1)創(chuàng)建信號量CreateSemaphore())用于創(chuàng)建一個信號量。原型:HANDLECreateSemaphore(LPSECURITYATTRIBUTESlpSemaphoreAttributes,//安全屬性LONGlIniti