讀者-寫者問題C源代碼_第1頁
讀者-寫者問題C源代碼_第2頁
讀者-寫者問題C源代碼_第3頁
讀者-寫者問題C源代碼_第4頁
讀者-寫者問題C源代碼_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、word.讀者寫者問題C+程序原創(chuàng)作品演示效果圖:程序完整代碼:#include <windows.h>#include <iostream.h>#include <fstream.h>#include <string.h> #include<string>#include<stdlib.h>/包含清屏頭文件/全局變量 int empty=1;/信號量int wrIn=1;/信號量int max;int temp30;int *wait,*next;int count=0;/記錄已經(jīng)完成操作的線程數(shù)int waitSema

2、pore;int type;/類型記錄int writc=1;int readc=1;void reader()/讀者函數(shù)開始empty-;/P操作改變信號量cout<<"讀者獲得資源"<<"("SYSTEMTIME sys;GetLocalTime(&sys);/輸出系統(tǒng)時間cout<<"系統(tǒng)時間:"<<sys.wHour<<":"<<sys.wMinute<<":"<<sys.wSecon

3、d<<":"<<sys.wMilliseconds<<")"<<endl;cout<<endl<<"*"<<"讀者正在進行讀操作."<<endl;/empty+;/信號量count+;/讀者函數(shù)結(jié)尾void writer()/寫者函數(shù)開始empty-;/P操作改變信號量wrIn-;/P操作改變信號量cout << " 寫者"<<writc<<"獲得資源&q

4、uot; <<"("SYSTEMTIME sys;GetLocalTime(&sys);/輸出系統(tǒng)時間cout<<"系統(tǒng)時間:"<<sys.wHour<<":"<<sys.wMinute<<":"<<sys.wSecond<<":"<<sys.wMilliseconds<<")"<<endl;cout<<"請輸入線程

5、要寫入的內(nèi)容,以/結(jié)尾"<<endl;char ch='a'ofstream outfile("f.txt",ios:out|ios:app); if(!outfile) cerr<<"open file error!"<<endl; abort(); while(ch!='/') cin>>ch; outfile<<ch; cout<<endl<<"*" <<"寫者"<&

6、lt;writc<<"正在進行寫操作." << endl; outfile.close();count+;/wrIn+;/V操作改變信號量/empty+;/V操作改變信號量/寫者函數(shù)結(jié)尾void codeIn()/輸入界面int ru;cout<<"請輸入你要創(chuàng)立多少個線程:"<<endl;cin>>max;for(int i=0;i<max;i+)cout<<"你所要創(chuàng)立的第"<<i+1<<"個線程類型為:1.讀者 2.寫

7、者"<<endl;cin>>ru;/if(ru=1|ru=2)tempi=ru;elsecout<<"輸入有誤!請重新輸入"<<endl;/判斷錯誤if(i=max-1)/錄入最后一個線程類型操作/system("cls");/清屏HANDLE hOut; hOut = GetStdHandle(STD_OUTPUT_HANDLE); /設(shè)置輸出字體顏色redSetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);

8、cout<<endl<<"輸入完畢!"<<endl;hOut = GetStdHandle(STD_OUTPUT_HANDLE); /設(shè)置輸出字體背景SetConsoleTextAttribute(hOut, BACKGROUND_GREEN | BACKGROUND_INTENSITY); for(int j=0;j<max;j+)/輸出錄入結(jié)果cout<<"線程"<<j+1<<"為:"if(tempj=1)cout<<"讀者&quo

9、t;<<endl;else cout<<"寫者"<<endl;/輸出錄入結(jié)果cout<<"下面將進行動態(tài)演示:"<<endl<<endl;system("pause");cout<<endl;/錄入最后一個線程類型操作/錄入界面結(jié)束/codeIn()int main()/主函數(shù)codeIn();/錄入界面wait=&temp0;while(wait<&tempmax&&count<max)waitSemapo

10、re=1;next=wait;while(*next=1|*next=2)/線程調(diào)用算法if(*next=1)/readerif(empty=1|(empty=0&&wrIn=1&&*wait!=2)/表達寫者優(yōu)先reader();/調(diào)用讀者函數(shù)type=1;elsecout<<""<<"讀者此時正在等待資源"<<""<<endl;/Sleep(5000);/sleep()if(waitSemapore=1)wait=next;/this reader i

11、s waiting,locate it.waitSemapore-;else/writerif(empty=1)writer();/調(diào)用寫者函數(shù)type=2;elsecout<<""<<"寫者此時正在等待資源"<<""<<endl; /Sleep(5000);/sleep()if(waitSemapore=1)/this writer is waiting,find it's location.wait=next;waitSemapore-;/writer is endnext+;/1while()if(type=1)cout<<""<<"讀者"<<readc<<"讀完畢,釋放資源"<<endl;readc+;empty+;/讀者用的,但是為了在輸出時演示出運行狀態(tài),不得不將其放在此處 Sleep(3000);/sleep()cout<<endl;else if(type=2)cout<<""<<"寫者"<<writc<<"

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論