windows線程同步與互斥

windows線程同步與互斥

ID:21926026

大小:136.00 KB

頁數(shù):10頁

時間:2018-10-25

windows線程同步與互斥_第1頁
windows線程同步與互斥_第2頁
windows線程同步與互斥_第3頁
windows線程同步與互斥_第4頁
windows線程同步與互斥_第5頁
資源描述:

《windows線程同步與互斥》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、實驗4Windows線程同步和互斥實驗?zāi)康?、了解Windows內(nèi)核對線程同步的支持。2、了解C的線程函數(shù)庫及Windows基本的線程API函數(shù)的使用。3、進一步理解線程的同步控制原理。預(yù)備知識一、Windows線程同步機制(注:互斥是同步的一種特例)n事件(Event)n臨界區(qū)(CriticalSection)n互斥量(Mutex)n信號量(Semaphore)1、是否能跨進城使用?互斥量、信號量、事件都可以跨進程來實現(xiàn)同步數(shù)據(jù)操作。臨界區(qū)只能用在同一進城的線程間互斥,因為臨界區(qū)無名(無句柄)。如果只為了在進程內(nèi)部用的話,使用臨界區(qū)會帶來速度上的優(yōu)勢并能夠減少資源占用量。2、

2、其它區(qū)別臨界區(qū):訪問臨界資源的代碼段。課堂上講過。(存錢、取錢的例子還記得嗎?)互斥量:資源獨占使用信號量:資源計數(shù)器事件對象:可以通過“通知”的方式來保持線程的同步。事件是WIN32中最靈活的線程間同步機制。事件存在兩種狀態(tài):激發(fā)狀態(tài)(SignaledorTrue)未激發(fā)狀態(tài)(UnsignaledorFalse)。3、詳細解釋:(見下面實驗內(nèi)容每個程序前)二、VC++(略)要用到的系統(tǒng)調(diào)用1、 2、實驗內(nèi)容1、用事件(Event)對象來進行線程同步n事件可分為兩類:n手動設(shè)置:這種對象只可能用程序手動設(shè)置,在需要該事件或者事件發(fā)生時,采用SetEvent及ResetEvent

3、來進行設(shè)置。n自動恢復(fù):一旦事件發(fā)生并被處理后,自動恢復(fù)到?jīng)]有事件狀態(tài),不需要再次設(shè)置。n_beginthread函數(shù):創(chuàng)建一個線程。所在庫文件:#include  uintptr_t_beginthread(  void(*start_address)(void*),  unsignedstack_size,  void*arglist  );  返回值:  假如成功,函數(shù)將返回一個處理信息對這個新創(chuàng)建的線程。如果失敗_beginthread將返回-1?! tart_address  新線程的起始地址,指向新線程調(diào)用的函數(shù)的起始地址stack_size

4、stack_size新線程的堆棧大小,可以為0arglistarglist傳遞給線程的參數(shù)列表,無參數(shù)是為NULL  nCreateEvent函數(shù):創(chuàng)建事件對象windows.hHANDLECreateEvent( //SECURITY_ATTRIBUTES結(jié)構(gòu)指針,可為NULLLPSECURITY_ATTRIBUTESlpEventAttributes, BOOLbManualReset, //手動/自動 //TRUE:在WaitForSingleObject后必須手動調(diào)用ResetEvent清除信號 //FALSE:在WaitForSingleObject后,系統(tǒng)自動清除事

5、件信號 BOOLbInitialState,//初始狀態(tài) LPCTSTRlpName//事件的名稱);n使用“事件”機制應(yīng)注意以下事項:n如果跨進程訪問事件,必須對事件命名,在對事件命名的時候,要注意不要與系統(tǒng)命名空間中的其它全局命名對象沖突;n事件是否要自動恢復(fù);n事件的初始狀態(tài)設(shè)置。n由于event對象屬于內(nèi)核對象,故進程B可以調(diào)用OpenEvent函數(shù)通過對象的名字獲得進程A中event對象的句柄,然后將這個句柄用于ResetEvent、SetEvent和WaitForMultipleObjects等函數(shù)中。此法可以實現(xiàn)一個進程的線程控制另一進程中線程的運行,例如:HAN

6、DLEhEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent");ResetEvent(hEvent);驗證程序:3個線程。主線程創(chuàng)建2個線程。一讀,一寫。寫線程(并不真寫,只是輸出writing等字符串)完成后,讀線程才能讀,讀線程完成后,主線程才能結(jié)束。新建一個Win32控制臺應(yīng)用程序項目(win32consoleapplication)#include"stdafx.h"#include#include#include#includeHANDL

7、EevRead,evFinish;//全局變量,事件對象的句柄voidReadThread(LPVOIDparam){WaitForSingleObject(evRead,INFINITE);//等待evRead被激活cout<<"Reading...讀完成,喚醒主線程"<

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。