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 14 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