版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)課程:操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)編號:實(shí)驗(yàn)名稱:生產(chǎn)者消費(fèi)者算法實(shí)驗(yàn)人員:年級專業(yè)學(xué)號姓名實(shí)驗(yàn)日期:上交日期:實(shí) 驗(yàn) 室:實(shí)驗(yàn)評價(jià):推薦精選實(shí)驗(yàn)成績:評定日期:指導(dǎo)教師:一、目的和要求生產(chǎn)者消費(fèi)者算法是操作系統(tǒng)中很重要的同步算法,通過本實(shí)驗(yàn)加深對互斥信號量和同步信號量的理解,掌握如何用信號量機(jī)制實(shí)現(xiàn)生產(chǎn)者消費(fèi)者之間的同步算法。二、實(shí)驗(yàn)內(nèi)容運(yùn)用高級語言模擬實(shí)現(xiàn)生產(chǎn)者消費(fèi)者算法,要求實(shí)現(xiàn)對緩沖池的互斥訪問和生產(chǎn)者進(jìn)程與消費(fèi)者進(jìn)程之間的同步,觀察程序的運(yùn)行情況并分析執(zhí)行結(jié)果。三、實(shí)驗(yàn)環(huán)境1PC微機(jī)。2Windows 操作系統(tǒng)。3C/C+/VB開發(fā)集成環(huán)境。推薦精選四、實(shí)驗(yàn)結(jié)果1. 程序源代碼:生產(chǎn)者&am
2、p;消費(fèi)者如下圖:# include <stdio.h># include <stdlib.h># include <time.h># include <sys/types.h># include <pthread.h># include <semaphore.h># include <string.h># include <unistd.h>#define BUFFER_SIZE 5typedef int buffer_item;推薦精選/semaphoressem_t empty, full,
3、mutex;/bufferbuffer_item bufferBUFFER_SIZE;int in, out;/存儲數(shù)據(jù)的結(jié)構(gòu)體struct data int id; int opTime; int lastTime; int productId;/有限緩存插入-生產(chǎn)推薦精選int insert_item(buffer_item item) /* insert item into buffer */ bufferout = item; out = (out + 1) % BUFFER_SIZE; return 0;/有限緩存刪除-消費(fèi)int remove_item(buffer_item *i
4、tem) /* remove an object from buffer and then place it in item */ *item = bufferin; in = (in + 1) % BUFFER_SIZE; return 0; /生產(chǎn)者void *producer(void* param) 推薦精選 int productId = (struct data*)param)->productId; int lastTime = (struct data*)param)->lastTime; int opTime = (struct data*)param)->
5、opTime; int id = (struct data*)param)->id; free(param); sleep(opTime); sem_wait(&empty); sem_wait(&mutex); /* critical section */ /add a item insert_item(productId); sleep(lastTime); printf("Thread %d: Producer produce %dn", id, productId);推薦精選 sem_post(&mutex); sem_post(&am
6、p;full); pthread_exit(0);/消費(fèi)者void *consumer(void* param) int lastTime = (struct data*)param)->lastTime; int opTime = (struct data*)param)->opTime; int id = (struct data*)param)->id; free(param); sleep(opTime); sem_wait(&full); sem_wait(&mutex);推薦精選 /* critical section */ /remove a i
7、tem buffer_item item; remove_item(&item); sleep(lastTime); printf("Thread %d: Consumer consume %dn", id, item); sem_post(&mutex); sem_post(&empty); pthread_exit(0);int main() /pthread pthread_t tid; / the thread identifier pthread_attr_t attr; /set of thread attributes推薦精選 /* g
8、et the default attributes */ pthread_attr_init(&attr); /initial the semaphores sem_init(&mutex, 0, 1); sem_init(&empty, 0, BUFFER_SIZE); sem_init(&full, 0, 0); in = out = 0; int id = 0; while(scanf("%d", &id) != EOF) char role; /producer or consumer int opTime; /operati
9、ng time int lastTime; /run time int productId; /product id推薦精選 scanf("%c%d%d", &role, &opTime, &lastTime); struct data* d = (struct data*)malloc(sizeof(struct data); d->id = id; d->opTime = opTime; d->lastTime = lastTime; if(role = 'P') scanf("%d", &a
10、mp;productId); d->productId = productId; pthread_create(&tid, &attr, producer, d); else if(role = 'C') pthread_create(&tid, &attr, consumer, d); /釋放信號量 sem_destroy(&mutex);推薦精選 sem_destroy(&empty); sem_destroy(&full); return 0;- 2實(shí)驗(yàn)報(bào)告。1(設(shè)計(jì)思路)&2(使用了幾個(gè)信號量,每個(gè)信
11、號量的作用)設(shè)置三個(gè)信號量:empty (以記錄有多少空位)、full (以記錄有多少滿位)以及mutex (二進(jìn)制信號量或互斥信號量,以保護(hù)對緩沖插入與刪除的操作)當(dāng)信號量empty為0的時(shí)候,此時(shí)有限緩存已滿,生產(chǎn)者必須等待,當(dāng)信號量full為0的時(shí)候,此時(shí)有限緩存為空,消費(fèi)者無法進(jìn)行消費(fèi),必須等待信號量mutex使得各個(gè)線程之間互斥,每次只允許一個(gè)線程進(jìn)入臨界區(qū),一旦有線程進(jìn)入自己的臨界區(qū),其余線程必須等待有限緩存區(qū)為循環(huán)隊(duì)列,尾部插入新的產(chǎn)品,頭部產(chǎn)品先被消耗推薦精選(3)解決方法的整體流程:有多個(gè)進(jìn)程:多個(gè)生產(chǎn)者進(jìn)程和多個(gè)消費(fèi)者進(jìn)程共享一個(gè)初始為空、固定大小為n的緩存(緩沖區(qū))。生產(chǎn)者的工作是制造數(shù)據(jù),只有緩沖區(qū)沒滿時(shí),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南匯工商行政管理志2025年版編纂與市場動(dòng)態(tài)跟蹤合同4篇
- 2025年樹木種植技術(shù)指導(dǎo)與培訓(xùn)服務(wù)合同范本3篇
- 二零二五年度無人零售鋪面轉(zhuǎn)租合同12篇
- 2025年度苗木種植與鄉(xiāng)村旅游融合發(fā)展合同4篇
- 2025年度門禁系統(tǒng)與訪客預(yù)約系統(tǒng)對接合同4篇
- 2025年度個(gè)人教育貸款抵押合同規(guī)范文本2篇
- 二零二五美容院加盟店開業(yè)籌備及營銷策劃合同3篇
- 2025年江蘇灌南騰升投資有限公司招聘筆試參考題庫含答案解析
- 婚慶餐飲與精細(xì)化服務(wù)
- 2025年安徽水利開發(fā)股份有限公司招聘筆試參考題庫含答案解析
- 2025-2030年中國陶瓷電容器行業(yè)運(yùn)營狀況與發(fā)展前景分析報(bào)告
- 2025年山西國際能源集團(tuán)限公司所屬企業(yè)招聘43人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 二零二五年倉儲配送中心物業(yè)管理與優(yōu)化升級合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂作品錄制許可
- 江蘇省無錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測試語文試題(解析版)
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語試卷(含答案解析)
- 開題報(bào)告:AIGC背景下大學(xué)英語教學(xué)設(shè)計(jì)重構(gòu)研究
- 師德標(biāo)兵先進(jìn)事跡材料師德標(biāo)兵個(gè)人主要事跡
- 連鎖商務(wù)酒店述職報(bào)告
- 2024年山東省煙臺市初中學(xué)業(yè)水平考試地理試卷含答案
評論
0/150
提交評論