2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗二 實驗二 實驗二 實驗二 進程的互斥與同步(生產(chǎn)者與消費者問題)實驗報告 進程的互斥與同步(生產(chǎn)者與消費者問題)實驗報告 進程的互斥與同步(生產(chǎn)者與消費者問題)實驗報告 進程的互斥與同步(生產(chǎn)者與消費者問題)實驗報告實驗?zāi)康模?實驗?zāi)康模?實驗?zāi)康模?實驗?zāi)康模豪?利用 利用 Windows Windows Windows 提供的 提供的 提供的 API API API 函數(shù),用 函數(shù),用 函數(shù),用 VISUALC++ VISU

2、ALC++ VISUALC++ 6.0 6.0 6.0 編寫程序,解決生產(chǎn)者與 編寫程序,解決生產(chǎn)者與 編寫程序,解決生產(chǎn)者與消費者問題,實現(xiàn)進程的互斥與同步 消費者問題,實現(xiàn)進程的互斥與同步 消費者問題,實現(xiàn)進程的互斥與同步 實驗內(nèi)容和步驟: 實驗內(nèi)容和步驟: 實驗內(nèi)容和步驟: 實驗內(nèi)容和步驟:本實驗設(shè)計在同一個進程地址空間內(nèi)執(zhí)行的七個線程。三個生產(chǎn)者線程 本實驗設(shè)計在同一個進程地址空間內(nèi)執(zhí)行的七個線程。三個生產(chǎn)者線程 本實驗設(shè)計在同

3、一個進程地址空間內(nèi)執(zhí)行的七個線程。三個生產(chǎn)者線程四個消費者線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程 四個消費者線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程 四個消費者線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。生產(chǎn)者線程生產(chǎn)物品時,若無 消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。生產(chǎn)者線程生產(chǎn)物品時,

4、若無 消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。生產(chǎn)者線程生產(chǎn)物品時,若無空緩沖區(qū)可用,生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū);消費者線程消費物 空緩沖區(qū)可用,生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū);消費者線程消費物 空緩沖區(qū)可用,生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū);消費者線程消費物品時,若無滿的緩沖區(qū),消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。 品時,若無滿的緩沖區(qū),消費者線程將被阻塞,直到新的

5、物品被生產(chǎn)出來。 品時,若無滿的緩沖區(qū),消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。本實驗中三個生產(chǎn)者線程的區(qū)別只在生產(chǎn)產(chǎn)品的時間不同,分別為: 本實驗中三個生產(chǎn)者線程的區(qū)別只在生產(chǎn)產(chǎn)品的時間不同,分別為: 本實驗中三個生產(chǎn)者線程的區(qū)別只在生產(chǎn)產(chǎn)品的時間不同,分別為:1 1 秒、 秒、 秒、2 2 秒、 秒、 秒、3 3 秒;四個消費者線程的區(qū)別也只在消費產(chǎn)品的時間不同,分別為: 秒;四個消費者線程的區(qū)別也只在消費產(chǎn)品的時間不同,分別為

6、: 秒;四個消費者線程的區(qū)別也只在消費產(chǎn)品的時間不同,分別為:0.5 0.5 0.5 秒、 秒、 秒、1 1 秒、 秒、 秒、1.5 1.5 1.5 秒、 秒、 秒、2 2 秒。它們使用二個不同的緩沖區(qū)。需要使用如下信號量: 秒。它們使用二個不同的緩沖區(qū)。需要使用如下信號量: 秒。它們使用二個不同的緩沖區(qū)。需要使用如下信號量: 一個互斥信號量,用以阻止生產(chǎn)者線程和消費者線程同時操作緩沖區(qū)列表; 一個互斥信號量,用以阻止生產(chǎn)者線程和消費者

7、線程同時操作緩沖區(qū)列表; 一個互斥信號量,用以阻止生產(chǎn)者線程和消費者線程同時操作緩沖區(qū)列表;一個信號量,用于當(dāng)緩沖區(qū)滿時讓生產(chǎn)者線程等待; 一個信號量,用于當(dāng)緩沖區(qū)滿時讓生產(chǎn)者線程等待; 一個信號量,用于當(dāng)緩沖區(qū)滿時讓生產(chǎn)者線程等待; 一個信號量,用于當(dāng)緩沖區(qū)空時讓消費者線程等待; 一個信號量,用于當(dāng)緩沖區(qū)空時讓消費者線程等待; 一個信號量,用于當(dāng)緩沖區(qū)空時讓消費者線程等待; 接下來利用 接下來利用 接下來利用 VC++6.0 VC++

8、6.0 VC++6.0 編寫一段程序,模擬生產(chǎn)者和消費者線程,實現(xiàn)進程的互斥 編寫一段程序,模擬生產(chǎn)者和消費者線程,實現(xiàn)進程的互斥 編寫一段程序,模擬生產(chǎn)者和消費者線程,實現(xiàn)進程的互斥與同步。 與同步。 與同步。程序結(jié)果通過 程序結(jié)果通過 程序結(jié)果通過 DOS DOS DOS 下窗口輸出,使生產(chǎn)者和消費者自動生產(chǎn)和消費產(chǎn)品,通過 下窗口輸出,使生產(chǎn)者和消費者自動生產(chǎn)和消費產(chǎn)品,通過 下窗口輸出,使生產(chǎn)者和消費者自動生產(chǎn)和消費產(chǎn)品,通過按

9、回車鍵來使程序退出。 按回車鍵來使程序退出。 按回車鍵來使程序退出。 主程序結(jié)構(gòu): 主程序結(jié)構(gòu): 主程序結(jié)構(gòu): 主程序結(jié)構(gòu): 1 1、 、 此程序要用到的頭文件,有 此程序要用到的頭文件,有 此程序要用到的頭文件,有 3 3 個: 個: 個:windows.h windows.h windows.h、 、iostream iostream iostream、 、d_random.h d_random.h d_random.h(用于產(chǎn)生隨

10、機數(shù) (用于產(chǎn)生隨機數(shù) (用于產(chǎn)生隨機數(shù)模擬產(chǎn)品) 模擬產(chǎn)品) 模擬產(chǎn)品) 2 2、 、 全局變量的定義,分別有: 全局變量的定義,分別有: 全局變量的定義,分別有:h_Mutex h_Mutex h_Mutex(互斥信號) (互斥信號) (互斥信號) 、 、bufferFullSemaphore bufferFullSemaphore bufferFullSemaphore(當(dāng)緩沖區(qū)滿時 (當(dāng)緩沖區(qū)滿時 (當(dāng)緩沖區(qū)滿時生產(chǎn)者等待信號量

11、) 生產(chǎn)者等待信號量) 生產(chǎn)者等待信號量) 、 、bufferEmptySemaphore bufferEmptySemaphore bufferEmptySemaphore(當(dāng)緩沖區(qū)空時消費者等待信號量) (當(dāng)緩沖區(qū)空時消費者等待信號量) (當(dāng)緩沖區(qū)空時消費者等待信號量) 、 、BUFFER_SIZE BUFFER_SIZE BUFFER_SIZE(緩沖區(qū)長度) (緩沖區(qū)長度) (緩沖區(qū)長度) 、 、buffer[] buffer[]

12、 buffer[](數(shù)組模擬緩沖區(qū)循環(huán)隊列) (數(shù)組模擬緩沖區(qū)循環(huán)隊列) (數(shù)組模擬緩沖區(qū)循環(huán)隊列) 、 、in in in(用與追蹤產(chǎn) (用與追蹤產(chǎn) (用與追蹤產(chǎn)品進緩沖區(qū)時的緩沖區(qū)數(shù)組下標(biāo)) 品進緩沖區(qū)時的緩沖區(qū)數(shù)組下標(biāo)) 品進緩沖區(qū)時的緩沖區(qū)數(shù)組下標(biāo)) 、 、out out out(用與追蹤產(chǎn)品出緩沖區(qū)時的緩沖區(qū)數(shù)組下 (用與追蹤產(chǎn)品出緩沖區(qū)時的緩沖區(qū)數(shù)組下 (用與追蹤產(chǎn)品出緩沖區(qū)時的緩沖區(qū)數(shù)組下標(biāo)) 標(biāo)) 標(biāo)) 、 、rndNu

13、m rndNum rndNum(用于產(chǎn)生隨機數(shù)) (用于產(chǎn)生隨機數(shù)) (用于產(chǎn)生隨機數(shù)) 、 、producerID[] producerID[] producerID[](生產(chǎn)者線程的標(biāo)識符) (生產(chǎn)者線程的標(biāo)識符) (生產(chǎn)者線程的標(biāo)識符) 、 、consumerID[] consumerID[] consumerID[](消費者線程的標(biāo)識符) (消費者線程的標(biāo)識符) (消費者線程的標(biāo)識符) 、 、control control co

14、ntrol(控制生產(chǎn)者消費者線程的循環(huán)的標(biāo)志) (控制生產(chǎn)者消費者線程的循環(huán)的標(biāo)志) (控制生產(chǎn)者消費者線程的循環(huán)的標(biāo)志)3 3、 、 生產(chǎn)者函數(shù), 生產(chǎn)者函數(shù), 生產(chǎn)者函數(shù),3 3 個生產(chǎn)者的函數(shù)名字分別為: 個生產(chǎn)者的函數(shù)名字分別為: 個生產(chǎn)者的函數(shù)名字分別為:producer1 producer1 producer1、 、producer2 producer2 producer2、 、producer3 producer3 pro

15、ducer3,其中 ,其中 ,其中區(qū)別只在于函數(shù)中的 區(qū)別只在于函數(shù)中的 區(qū)別只在于函數(shù)中的 Sleep() Sleep() Sleep()的參數(shù)不同,分別為: 的參數(shù)不同,分別為: 的參數(shù)不同,分別為:1000 1000 1000、 、2000 2000 2000、 、3000 3000 3000。此函數(shù)用于執(zhí) 。此函數(shù)用于執(zhí) 。此函數(shù)用于執(zhí)行生產(chǎn)者線程時所要進行的操作,本程序模擬生產(chǎn)者生產(chǎn)一個 行生產(chǎn)者線程時所要進行的操作,本程序模

16、擬生產(chǎn)者生產(chǎn)一個 行生產(chǎn)者線程時所要進行的操作,本程序模擬生產(chǎn)者生產(chǎn)一個 10000 10000 10000 到 到 99999 99999 99999 的隨機 的隨機 的隨機數(shù)做產(chǎn)品,并輸出生產(chǎn)出的這個數(shù)字,并輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況 數(shù)做產(chǎn)品,并輸出生產(chǎn)出的這個數(shù)字,并輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況 數(shù)做產(chǎn)品,并輸出生產(chǎn)出的這個數(shù)字,并輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況4 4、 、 消費者函數(shù), 消費者函數(shù), 消費者函數(shù),4 4

17、個消費者的函數(shù)名字分別為: 個消費者的函數(shù)名字分別為: 個消費者的函數(shù)名字分別為:consumer1 consumer1 consumer1、 、consumer2 consumer2 consumer2、 、consumer3 consumer3 consumer3、 、consumer4 consumer4 consumer4,其中區(qū)別只在于函數(shù)中的 ,其中區(qū)別只在于函數(shù)中的 ,其中區(qū)別只在于函數(shù)中的 Sleep() Sleep()

18、 Sleep()的參數(shù)不同,分別為: 的參數(shù)不同,分別為: 的參數(shù)不同,分別為:500 500 500、 、1000 1000 1000、 、1500 1500 1500、 、2000 2000 2000。此函數(shù)用于執(zhí)行消費者線程時所要進行的操作,本程序模擬消費者消費 。此函數(shù)用于執(zhí)行消費者線程時所要進行的操作,本程序模擬消費者消費 。此函數(shù)用于執(zhí)行消費者線程時所要進行的操作,本程序模擬消費者消費一個緩沖區(qū)已經(jīng)存在的數(shù)字,消費完后使此緩

19、沖區(qū)的數(shù)字變 一個緩沖區(qū)已經(jīng)存在的數(shù)字,消費完后使此緩沖區(qū)的數(shù)字變 一個緩沖區(qū)已經(jīng)存在的數(shù)字,消費完后使此緩沖區(qū)的數(shù)字變 0 0 來表示該區(qū)無產(chǎn)品,并 來表示該區(qū)無產(chǎn)品,并 來表示該區(qū)無產(chǎn)品,并輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況 輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況 輸出產(chǎn)品生產(chǎn)后緩沖區(qū)的儲存情況5 5、 、 主函數(shù)部分,對全局變量定義的信號量賦值,創(chuàng)建 主函數(shù)部分,對全局變量定義的信號量賦值,創(chuàng)建 主函數(shù)部分,對全局變量定義的信號量賦值,創(chuàng)建

20、3 3 個生產(chǎn)者線程和 個生產(chǎn)者線程和 個生產(chǎn)者線程和 4 4 個消費者線 個消費者線 個消費者線程,實驗當(dāng)按回車鍵的時候程序退出(使控制變量 程,實驗當(dāng)按回車鍵的時候程序退出(使控制變量 程,實驗當(dāng)按回車鍵的時候程序退出(使控制變量 control control control 為 為 false false false) )實驗中所遇到的問題及解決辦法: 實驗中所遇到的問題及解決辦法: 實驗中所遇到的問題及解決辦法: 實驗中所遇到

21、的問題及解決辦法: 1 1、 、 生產(chǎn)者消費者函數(shù)問題。 生產(chǎn)者消費者函數(shù)問題。 生產(chǎn)者消費者函數(shù)問題。 由于 由于 由于 3 3 個生產(chǎn)者函數(shù)之間和 個生產(chǎn)者函數(shù)之間和 個生產(chǎn)者函數(shù)之間和 4 4 個消費者函數(shù)之間的區(qū)別只是 個消費者函數(shù)之間的區(qū)別只是 個消費者函數(shù)之間的區(qū)別只是 Sleep Sleep Sleep()這個函數(shù)的參 ()這個函數(shù)的參 ()這個函數(shù)的參數(shù)不同,于是一開始我編了一個生產(chǎn)者函數(shù)和一個消費者函數(shù),它們都接受一個

22、參數(shù) 數(shù)不同,于是一開始我編了一個生產(chǎn)者函數(shù)和一個消費者函數(shù),它們都接受一個參數(shù) 數(shù)不同,于是一開始我編了一個生產(chǎn)者函數(shù)和一個消費者函數(shù),它們都接受一個參數(shù)sleepTime sleepTime sleepTime 用于確定 用于確定 用于確定 Sleep Sleep Sleep()函數(shù)中的參數(shù)。但在創(chuàng)建線程的函數(shù) ()函數(shù)中的參數(shù)。但在創(chuàng)建線程的函數(shù) ()函數(shù)中的參數(shù)。但在創(chuàng)建線程的函數(shù) CreateThread CreateThre

23、ad CreateThread()中, ()中, ()中,生產(chǎn)者函數(shù)和消費者函數(shù)要做為這個函數(shù)的第三個參數(shù)傳進來,而這個創(chuàng)建線程的函數(shù)的 生產(chǎn)者函數(shù)和消費者函數(shù)要做為這個函數(shù)的第三個參數(shù)傳進來,而這個創(chuàng)建線程的函數(shù)的 生產(chǎn)者函數(shù)和消費者函數(shù)要做為這個函數(shù)的第三個參數(shù)傳進來,而這個創(chuàng)建線程的函數(shù)的參數(shù)定義來看,第三個傳遞進來的函數(shù)不能接受非 參數(shù)定義來看,第三個傳遞進來的函數(shù)不能接受非 參數(shù)定義來看,第三個傳遞進來的函數(shù)不能接受非 voi

24、d void void * *類型的參數(shù),于是該方案失敗, 類型的參數(shù),于是該方案失敗, 類型的參數(shù),于是該方案失敗,考慮過把生產(chǎn)者和消費者創(chuàng)建成類,但還是失敗了,最終解決辦法是編寫了 考慮過把生產(chǎn)者和消費者創(chuàng)建成類,但還是失敗了,最終解決辦法是編寫了 考慮過把生產(chǎn)者和消費者創(chuàng)建成類,但還是失敗了,最終解決辦法是編寫了 3 3 個生產(chǎn)者函 個生產(chǎn)者函 個生產(chǎn)者函數(shù)和 數(shù)和 數(shù)和 4 4 個消費者函數(shù),導(dǎo)致代碼加長。更有效的解決辦法還請老

25、師指導(dǎo)指導(dǎo)。 個消費者函數(shù),導(dǎo)致代碼加長。更有效的解決辦法還請老師指導(dǎo)指導(dǎo)。 個消費者函數(shù),導(dǎo)致代碼加長。更有效的解決辦法還請老師指導(dǎo)指導(dǎo)。2 2、 、 程序結(jié)束問題。 程序結(jié)束問題。 程序結(jié)束問題。 一開始我想讓程序自動結(jié)束,初步想法是定義一個變量追蹤實際線程數(shù)目,再定義一 一開始我想讓程序自動結(jié)束,初步想法是定義一個變量追蹤實際線程數(shù)目,再定義一 一開始我想讓程序自動結(jié)束,初步想法是定義一個變量追蹤實際線程數(shù)目,再定義一 個常量為最

26、大線程數(shù)目,當(dāng)實際線程數(shù)目大于最大線程數(shù)目時程序結(jié)束(見我原程序注釋 個常量為最大線程數(shù)目,當(dāng)實際線程數(shù)目大于最大線程數(shù)目時程序結(jié)束(見我原程序注釋 個常量為最大線程數(shù)目,當(dāng)實際線程數(shù)目大于最大線程數(shù)目時程序結(jié)束(見我原程序注釋掉了的變量及程序) 掉了的變量及程序) 掉了的變量及程序) ,此辦法我運行后程序并不能如我想的結(jié)束,百思不得其解后我變把程 ,此辦法我運行后程序并不能如我想的結(jié)束,百思不得其解后我變把程 ,此辦法我運行后程序并不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論