




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include <windows.h>#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>#define MAX_PERSON 100#define READER 0 /讀者#define WRITER 1 /寫(xiě)者#define END -1#define R READER#define W WRITERtypedef struct _PersonHANDLE m_hThread;/定義處
2、理線程的句柄int m_nType;/進(jìn)程類型(讀寫(xiě))int m_nStartTime;/開(kāi)始時(shí)間int m_nWorkTime;/運(yùn)行時(shí)間int m_nID;/進(jìn)程號(hào)Person;Person g_PersonsMAX_PERSON;int g_NumPerson = 0;long g_CurrentTime= 0;/基本時(shí)間片數(shù)int g_PersonLists = /進(jìn)程隊(duì)列1, W, 3, 5, 2, W, 16, 5, 3, R, 5, 2,4, W, 6, 5, 5, R, 4, 3, 6, R, 17,7,END,;int g_NumOfReading = 0;int g_Num
3、OfWriteRequest = 0;/申請(qǐng)寫(xiě)進(jìn)程的個(gè)數(shù)HANDLE g_hReadSemaphore;/讀者信號(hào)HANDLE g_hWriteSemaphore;/寫(xiě)者信號(hào)bool finished = false; /所有的讀完成/bool wfinished = false; /所有的寫(xiě)完成void CreatePersonList(int *pPersonList);bool CreateReader(int StartTime,int WorkTime,int ID);bool CreateWriter(int StartTime,int WorkTime,int ID);DWORD
4、 WINAPI ReaderProc(LPVOID lpParam);DWORD WINAPI WriterProc(LPVOID lpParam);int main()g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL); /創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); /創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100CreatePersonList(g_PersonLists); / Create All the reader and
5、 writersprintf("創(chuàng)建所有讀者寫(xiě)者n");g_CurrentTime = 0;while(true)g_CurrentTime+;Sleep(300); / 300 msprintf("當(dāng)前時(shí)間 = %dn",g_CurrentTime);if(finished) return 0; / return 0;void CreatePersonList(int *pPersonLists)int i=0;int *pList = pPersonLists;bool Ret;while(pList0 != END)switch(pList1)ca
6、se R:Ret = CreateReader(pList2,pList3,pList0);/351,w452,523,654break; case W:Ret = CreateWriter(pList2,pList3,pList0);break;if(!Ret)printf("創(chuàng)建 %d 錯(cuò)誤n",pList0);pList += 4; / move to next person listDWORD WINAPI ReaderProc(LPVOID lpParam)/讀過(guò)程Person *pPerson = (Person*)lpParam;/ wait for the
7、start timewhile(g_CurrentTime != pPerson->m_nStartTime) printf("讀者 %d 正在請(qǐng)求n",pPerson->m_nID);printf("nn*n");/ wait for the write requestWaitForSingleObject(g_hReadSemaphore,INFINITE); if(g_NumOfReading =0)WaitForSingleObject(g_hWriteSemaphore,INFINITE); g_NumOfReading+;Rele
8、aseSemaphore(g_hReadSemaphore,1,NULL);pPerson->m_nStartTime = g_CurrentTime;printf("讀者 %d 正在讀取共享緩沖區(qū)n",pPerson->m_nID);printf("nn*n");while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)printf("讀者 %d 正在退出n",pPerson->m_nID);printf("n
9、n*n");WaitForSingleObject(g_hReadSemaphore,INFINITE);g_NumOfReading-;if(g_NumOfReading = 0)ReleaseSemaphore(g_hWriteSemaphore,1,NULL);/此時(shí)沒(méi)有讀者,可以寫(xiě)ReleaseSemaphore(g_hReadSemaphore,1,NULL);if(pPerson->m_nID = 4) finished = true; /所有的讀寫(xiě)完成ExitThread(0);return 0;DWORD WINAPI WriterProc(LPVOID lpP
10、aram)Person *pPerson = (Person*)lpParam;/ wait for the start timewhile(g_CurrentTime != pPerson->m_nStartTime)printf("寫(xiě)者 %d 正在請(qǐng)求進(jìn)行寫(xiě)操作n",pPerson->m_nID);printf("nn*n");WaitForSingleObject(g_hWriteSemaphore,INFINITE);/ modify the writer's real start timepPerson->m_nSta
11、rtTime = g_CurrentTime;printf("寫(xiě)者 %d 正在向共享緩沖區(qū)寫(xiě)內(nèi)容n",pPerson->m_nID);while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)printf("寫(xiě)者 %d 正在退出n",pPerson->m_nID);printf("nn*n");/g_NumOfWriteRequest-;ReleaseSemaphore(g_hWriteSemaphore,1,NULL);if(
12、pPerson->m_nID = 4) finished = true;/所有的讀寫(xiě)完成ExitThread(0);return 0;bool CreateReader(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->
13、m_nWorkTime = WorkTime;pPerson->m_nType = READER;g_NumPerson+;/ Create an New ThreadpPerson->m_hThread= CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);if(pPerson->m_hThread = NULL)return false;return true;bool CreateWriter(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->m_nWorkTime = WorkT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游管理案例研究練習(xí)題
- 學(xué)科交叉融合促進(jìn)應(yīng)用型人才綜合素質(zhì)發(fā)展
- 零售電商行業(yè)銷售趨勢(shì)統(tǒng)計(jì)表
- 汽車工程維修技術(shù)知識(shí)點(diǎn)解析
- 2025年文化傳播與互聯(lián)網(wǎng)的綜合能力考核考試卷及答案
- 2025年現(xiàn)代詩(shī)歌鑒賞能力考試試卷及答案
- 2025年數(shù)理邏輯與數(shù)學(xué)思維考試試題及答案
- 2025年審計(jì)學(xué)基礎(chǔ)理論與實(shí)務(wù)能力提高測(cè)試卷及答案
- 2025年人工智能倫理與社會(huì)影響知識(shí)測(cè)試卷及答案
- 2025年綠色經(jīng)濟(jì)與可持續(xù)發(fā)展考試卷及答案
- 公司業(yè)務(wù)提成方案
- 醫(yī)學(xué)高級(jí)職稱評(píng)審答辯報(bào)告PPT模板
- 《緩解新入園幼兒焦慮策略的研究》課題結(jié)題材料(開(kāi)題報(bào)告、中期報(bào)告、結(jié)題報(bào)告、調(diào)查問(wèn)卷、課題論文)
- 《數(shù)學(xué)歸納法》 優(yōu)秀獎(jiǎng) 教學(xué)課件
- ANSIESD S20.202021 中英文對(duì)照版
- 投入的主要施工機(jī)械計(jì)劃
- GB-T 19639.2-2014 通用閥控式鉛酸蓄電池 第2部分:規(guī)格型號(hào)
- 公司財(cái)政資金財(cái)務(wù)管理辦法
- 《數(shù)據(jù)采集與預(yù)處理》教學(xué)教案(全)
- DVD在線租賃的分配問(wèn)題
- 焊接技能訓(xùn)練教案.
評(píng)論
0/150
提交評(píng)論