Professional Documents
Culture Documents
CMH
CMH
CMH
h> class message { public: int type; //1:request 2:reply 3:release int senderid,receiverid; int id1,id2,id3; int rr1,rr2; message() { rr1=rr2=0; } message(int t,int sid,int i1,int i2,int i3,int rid=100) { type=t; senderid=sid; receiverid=rid; id1=i1; id2=i2; id3=i3; rr1=0; rr2=0; } void getdata() { cin>>type>>senderid>>id1>>id2>>id3;
{ M[++rear]=m1; } }
};
class site { public: int id; int c[3]; char status[30]; requestqueue R; site() { } site(int i) { id=i; c[0]=0; c[1]=0; c[2]=0; } message sendrequest() { cout<<id<<"is sending the request"; c[id-1]++; message r(1,id,c[0],c[1],c[2]); R.enqueue(r); r.display(); return r; }
message receiverequest(message r) { c[id-1]++; if (r.id1 > c[0] ) c[0]=r.id1; if (r.id2 > c[1] ) c[1]=r.id2; if (r.id3 > c[2] ) c[2]=r.id3; R.enqueue(r); return (sendreply(r.senderid));
int receivereply(message m) { message m1=R.getfront(); m1.display(); message temp= returnolder(m1,m); temp.display(); if((temp.id1==m.id1)&&(temp.id2==m.id2)&&(temp.id3==m.id3)) { strcpy(status,"\nentered");cout<<"status\n"<<status;return 1;
} }
struct message returnolder(message r1, message r2) { if((r1.id1>=r2.id1)&&(r1.id2>=r2.id2)&&(r1.id3>=r2.id3)) return r2; else if((r2.id1>=r1.id1)&&(r2.id2>=r1.id2)&&(r2.id3>=r1.id3)) return r1; }
};
void main() { int ch,id; site s1(1),s2(2),s3(3); int holder; clrscr(); do { cout<<"1: send request 2:Release CS 3: exit 4: display holder\n"; cout<<"please enter your choice ";
cin>>ch; switch(ch) { case 1: cout<<"enter the sender site id"; cin>>id; message r,reply1,reply2; if (id ==1) { r=s1.sendrequest(); reply1=s2.receiverequest(r); reply2=s3.receiverequest(r); if(s1.receivereply(r)==1) holder=1; } else if (id==2) { r=s2.sendrequest(); reply1=s1.receiverequest(r); reply2=s3.receiverequest(r); if(s2.receivereply(r)==1) holder=2; } else if (id ==3) { r=s3.sendrequest(); reply1=s2.receiverequest(r); reply2=s1.receiverequest(r); if(s3.receivereply(r)==1) holder=3; } break;
break; } } while(ch!=3); }