读者写者问题源代码

读者写者问题源代码

ID:14700667

大小:56.00 KB

页数:8页

时间:2018-07-30

读者写者问题源代码_第1页
读者写者问题源代码_第2页
读者写者问题源代码_第3页
读者写者问题源代码_第4页
读者写者问题源代码_第5页
资源描述:

《读者写者问题源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#include/*malloc()等*/#include/*INT_MAX等*/#include/*EOF(=^Z或F6),NULL*/#include/*atoi()*/#include/*eof()*/#include/*floor(),ceil(),abs()*/#include/*exit()*/#include#includeusingnamespa

2、cestd;#defineBUF10//缓存的大小#defineMAX20//最大可以输入的字符typedefstructPcb{charname[10];//进程名charstate[10];//运行状态charreason[10];//若阻塞,其原因intbreakp;//断点保护structPcb*next;//阻塞时的顺序}Pcb,*link;ints1,s2;//信号量linkp1;//生产者进程linkc1;//消费者进程charstr[MAX];//输入的字符串charbuffer[BUF];//缓冲池intlen;//输入长度intsp=0;//string的指针intin=

3、0;//生产者指针intout=0;//消费者指针chartemp;//供打印的临时产品charrec_p[MAX];//生产记录intrp1=0;//生产记录指针charrec_c[MAX];//消费记录intrp2=0;//消费记录指针linkready;//就绪队列linkb_s1;//s1阻塞队列linkb_s2;//s2阻塞队列intpc;//程序计数器intcount;//字符计数器intcon_cnt;//消费计数器voidinit();//初始化voidp(ints);//P操作voidv(ints);//V操作voidblock(ints);//阻塞函数voidwakeup

4、(ints);//唤醒函数voidcontrol();//处理机调度voidprocessor();//处理机执行voidprint();//打印函数voidmain(){printf("*生产者消费者模拟");printf("---------");printf("*请输入字符串:");scanf("%s",str);//string数组存放将要产生的字符len=strlen(str);count=len;//输入字符的个数init();//初始化while(con_cnt

5、---模拟指令流程--------");control();//处理器调度程序processor();//模拟处理器指令执行print();//输出显示各个信息}printf("程序结束!");}voidinit(){//初始化s1=BUF;s2=0;p1=(link)malloc(sizeof(Pcb));//建立新的结点,并初始化为生产者strcpy(p1->name,"Producer");strcpy(p1->state,"Ready");strcpy(p1->reason,"Null");p1->breakp=0;p1->next=NULL;c1=(link)mallo

6、c(sizeof(Pcb));//建立新的结点,并初始化为消费者strcpy(c1->name,"Consumer");strcpy(c1->state,"Ready");strcpy(c1->reason,"Null");c1->breakp=0;c1->next=NULL;ready=p1;ready->next=c1;//初始化为生产进程在前,消费进程在后c1->next=NULL;b_s1=NULL;b_s2=NULL;//阻塞进程为NULLpc=0;con_cnt=0;//消费计数器}voidp(ints){if(s==1){//p(s1)s1--;if(s1<0)block(1)

7、;//阻塞当前生产进程else{printf("t*s1信号申请成功!");ready->breakp=pc;//保存断点}}else{//p(s2)s2--;if(s2<0)block(2);//阻塞当前消费进程else{printf("t*s2信号申请成功!");ready->breakp=pc;//保存断点}}}voidv(ints){if(s==1){//v(s1)s1++;if(s1<=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。