读者和写者问题(3)

2019-08-30 17:06

if(Wmutex<0) //表示如果Wmutex<0,则该写者进入等待队列 { w_wait[-Wmutex-1]=i; } else write(i); }

void write(int i) { w[i]=1; }

void V_write(int i) { w[i]=0; Wmutex++; if(Wmutex<=0) // 表示如果Wmutex<=0,则从等待队列中选择写者或读者进行操作 { int k,j; if((w_wait[0]>=0)&&(w_wait[0]

void P_radd(int i) { Rmutex--; if(Rmutex<0) // 表示如果Rmutex<0,则进入等待队列 { r_wait[-Rmutex]=i; } else radd(i);

11

}

void radd(int i) { readCount++; if(readCount==1) P_read(i); else V_radd(i); }

void P_read(int i) { Wmutex--; if(Wmutex<0) // 表示如果Wmutex<0,则进入等待队列 { w_wait[-Wmutex-1]=10; r_wait[0]=i; } else V_radd(i); }

void V_radd(int i) { Rmutex++; if(Rmutex<=0) //表示如果Rmutex<=0,则从等待队列中选择读者进入readCount的临界区 { int k,j; j=r_wait[0]; for(k=0;k

void read(int i) { r[i]=1; }

void P_rsub(int i) { r[i]=0;

12

Rmutex--; rsub(i); }

void rsub(int i) { readCount--; if(readCount==0) V_read(i); else V_rsub(i); }

void V_read(int i) { Wmutex++; if(Wmutex<=0) //表示如果Wmutex<=0,则从等待队列中选择写者或读者进行操作 { int k,j; if((w_wait[0]>=0)&&(w_wait[0]

void V_rsub(int i) { Rmutex++; }

int main() { using namespace std; cout<<\请输入写者个数(1到10):\ cin>>w_num; while(w_num<1||w_num>10)

13

{ cout<<\输入有误,请重新输入写者个数(1到10):\ cin>>w_num; }//完成对写者个数的输入 cout<<\请输入读者个数(1到10):\ cin>>r_num; while(r_num<1||r_num>10) { cout<<\输入有误,请重新输入读者个数(1到10):\ cin>>r_num; }//完成对读者个数的输入 int x,k,j,a[20]; while(1) { cout<<\ for(k=0;k<20;k++) a[k]=0; cout<<\Rmutex=\ for(k=0;k

if(w_wait[0]==-1) cout<<\等待队列中无对象\ else { cout<<\等待队列中有:\ for(k=0;k=0)&&(w_wait[k]

14

for(k=0;k>x; while(x<1||x>(w_num+r_num+1)||a[x-1]==1) { if(a[x-1]==1) cout<<\该对象已在等待队列中,请重新输入:\ else cout<<\输入有误,请重新输入:\ cin>>x; } for(k=0;k

15

if(w[k]==0) P_write(k); else V_write(k); break; } }

for(k=0;k

if(x==(w_num+r_num+1)) return 0;

}

}

16


读者和写者问题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年最新人教版六年级语文下册第二单元测试卷及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: