读者-写者问题C源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读者——写者问题C++程序
(原创作品)
演示效果图:
程序完整代码:
#include
#include
#include
#include
#include
#include
int empty=1;//信号量
int wrIn=1;//信号量
int max;
int temp[30];
int *wait,*next;
int count=0;//记录已经完成操作的线程数
int waitSemapore;
int type;//类型记录
int writc=1;
int readc=1;
void reader()/////////////////////////////////////////////////////读者函数开始
{
empty--;//P操作改变信号量
cout<<"读者获得资源"<<"(";
SYSTEMTIME sys;
GetLocalTime(&sys);//输出系统时间
cout<<"系统时间:"< cout< //empty++;//信号量 count++; }/////////////////////////////////////////////////////////读者函数结尾 void writer()//////////////////////////////////////////////////写者函数开始 { empty--;//P操作改变信号量 wrIn--;//P操作改变信号量 cout << " 写者"< SYSTEMTIME sys; GetLocalTime(&sys);//输出系统时间 cout<<"系统时间:"< cout<<"请输入线程要写入的内容,以/结尾"< char ch='a'; ofstream outfile("f.txt",ios::out|ios::app); if(!outfile) { cerr<<"open file error!"< abort(); } while(ch!='/') { cin>>ch; outfile< } cout< outfile.close(); count++; //wrIn++;//V操作改变信号量 //empty++;//V操作改变信号量 }//////////////////////////////////////////////////////////////写者函数结尾 void codeIn()/////////////////////////////////////////////////////////////////输入界面{ int ru; cout<<"请输入你要创建多少个线程:"< cin>>max; for(int i=0;i { cout<<"你所要创建的第"<>ru;/////////////// if(ru==1||ru==2) temp[i]=ru; else cout<<"输入有误!请重新输入"< if(i==max-1)//录入最后一个线程类型操作 { //system("cls");//清屏 HANDLE hOut; hOut = GetStdHandle(STD_OUTPUT_HANDLE); //设置输出字体颜色red SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY); cout< hOut = GetStdHandle(STD_OUTPUT_HANDLE); //设置输出字体背景SetConsoleTextAttribute(hOut, BACKGROUND_GREEN | BACKGROUND_INTENSITY); for(int j=0;j {cout<<"线程"< if(temp[j]==1)cout<<"读者"< else cout<<"写者"< }///////////////////////////////输出录入结果 cout<<"下面将进行动态演示:"< system("pause"); cout< }//录入最后一个线程类型操作 }//录入界面结束} }/////////////////////////////////////////////////////////codeIn() int main()/////////////////////////////////////////////////主函数 { codeIn();//录入界面 wait=&temp[0]; while(wait<&temp[max]&&count {