Я пишу программу (для домашнего задания), которая имитирует унисекс ванную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема заключается в том, чтобы позволить максимум 4 человекам в ванной. Как видно из выходных данных, в туалет одновременно входит только 1 человек. Вот мой код:
const int Delayx = 60;
int i;
int restroom = 0;
int Menwaiting = 0;
int Womenwaiting = 0;
semaphore max_capacity;
semaphore woman;
semaphore man;
semaphore mutex;
semaphore restroomcount;
void Delay(void)
{
int DelayTime;
DelayTime = random(Delayx);
for (i = 0; i<DelayTime; i++);
}
void Woman(void)
{
// for(;;){
Womenwaiting++;
//wait(mutex);
wait(woman);
wait(max_capacity);
//wait(woman);
wait(mutex);
wait(restroomcount);
cout << "A Woman has entered Restroom"<<endl;
cout << "People in the Restroom:" << restroom++ <<endl <<endl;
signal(restroomcount);
Womenwaiting--;
Delay();
wait(restroomcount);
cout << "A woman has exited Restroom"<<endl;
cout << "People in the Restroom:" << restroom-- <<endl<<endl;
signal(restroomcount);
signal(mutex);
signal(max_capacity);
if(Menwaiting > Womenwaiting){
signal(man);
}
else{
signal(woman);
}
//signal(max_capacity);
//signal(man);
// }
}
void Man(void)
{
// for(;;){
Menwaiting++;
//wait(mutex);
wait(man);
wait(max_capacity);
//wait(man);
wait(mutex);
wait(restroomcount);
cout <<"A Man has entered the Restroom"<<endl;
cout <<"People in the Restroom:" << restroom++ <<endl<<endl;
signal(restroomcount);
Menwaiting--;
//signal(mutex);
Delay();
//wait(mutex);
wait(restroomcount);
cout << "A man has exited the Restroom"<<endl;
cout <<"People in the Restroom:" << restroom-- <<endl<<endl;
signal(restroomcount);
signal(mutex);
signal(max_capacity);
if(Womenwaiting > Menwaiting){
signal(woman);
}
else{
signal(man);
}
//signal(max_capacity);
//signal(woman);
//}
}
void main()
{
initialsem(woman,1);
initialsem(man,1);
initialsem(max_capacity,4);
initialsem(mutex,1);
initialsem(restroomcount,1);
cobegin
{
Woman(); Woman(); Woman(); Woman(); Woman(); Man(); Man(); Man(); Man(); Man();
}
}
Это дает следующий результат:
Мужчина вошел в уборную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема ...
Я пишу программу (для домашнего задания), которая имитирует унисекс ванную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема заключается в том, чтобы позволить максимум 4 человекам в ванной. Как видно из выходных данных, в туалет одновременно входит только 1 человек. Вот мой код:
const int Delayx = 60; int i; int restroom = 0; int Menwaiting = 0; int Womenwaiting = 0; semaphore max_capacity; semaphore woman; semaphore man; semaphore mutex; semaphore restroomcount; void Delay(void) { int DelayTime; DelayTime = random(Delayx); for (i = 0; i<DelayTime; i++); } void Woman(void) { // for(;;){ Womenwaiting++; //wait(mutex); wait(woman); wait(max_capacity); //wait(woman); wait(mutex); wait(restroomcount); cout << "A Woman has entered Restroom"<<endl; cout << "People in the Restroom:" << restroom++ <<endl <<endl; signal(restroomcount); Womenwaiting--; Delay(); wait(restroomcount); cout << "A woman has exited Restroom"<<endl; cout << "People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Menwaiting > Womenwaiting){ signal(man); } else{ signal(woman); } //signal(max_capacity); //signal(man); // } } void Man(void) { // for(;;){ Menwaiting++; //wait(mutex); wait(man); wait(max_capacity); //wait(man); wait(mutex); wait(restroomcount); cout <<"A Man has entered the Restroom"<<endl; cout <<"People in the Restroom:" << restroom++ <<endl<<endl; signal(restroomcount); Menwaiting--; //signal(mutex); Delay(); //wait(mutex); wait(restroomcount); cout << "A man has exited the Restroom"<<endl; cout <<"People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Womenwaiting > Menwaiting){ signal(woman); } else{ signal(man); } //signal(max_capacity); //signal(woman); //} } void main() { initialsem(woman,1); initialsem(man,1); initialsem(max_capacity,4); initialsem(mutex,1); initialsem(restroomcount,1); cobegin { Woman(); Woman(); Woman(); Woman(); Woman(); Man(); Man(); Man(); Man(); Man(); } }
Это дает следующий результат:
Мужчина вошел в уборную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема ...
Я пишу программу (для домашнего задания), которая имитирует унисекс ванную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема заключается в том, чтобы позволить максимум 4 человекам в ванной. Как видно из выходных данных, в туалет одновременно входит только 1 человек. Вот мой код:
const int Delayx = 60; int i; int restroom = 0; int Menwaiting = 0; int Womenwaiting = 0; semaphore max_capacity; semaphore woman; semaphore man; semaphore mutex; semaphore restroomcount; void Delay(void) { int DelayTime; DelayTime = random(Delayx); for (i = 0; i<DelayTime; i++); } void Woman(void) { // for(;;){ Womenwaiting++; //wait(mutex); wait(woman); wait(max_capacity); //wait(woman); wait(mutex); wait(restroomcount); cout << "A Woman has entered Restroom"<<endl; cout << "People in the Restroom:" << restroom++ <<endl <<endl; signal(restroomcount); Womenwaiting--; Delay(); wait(restroomcount); cout << "A woman has exited Restroom"<<endl; cout << "People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Menwaiting > Womenwaiting){ signal(man); } else{ signal(woman); } //signal(max_capacity); //signal(man); // } } void Man(void) { // for(;;){ Menwaiting++; //wait(mutex); wait(man); wait(max_capacity); //wait(man); wait(mutex); wait(restroomcount); cout <<"A Man has entered the Restroom"<<endl; cout <<"People in the Restroom:" << restroom++ <<endl<<endl; signal(restroomcount); Menwaiting--; //signal(mutex); Delay(); //wait(mutex); wait(restroomcount); cout << "A man has exited the Restroom"<<endl; cout <<"People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Womenwaiting > Menwaiting){ signal(woman); } else{ signal(man); } //signal(max_capacity); //signal(woman); //} } void main() { initialsem(woman,1); initialsem(man,1); initialsem(max_capacity,4); initialsem(mutex,1); initialsem(restroomcount,1); cobegin { Woman(); Woman(); Woman(); Woman(); Woman(); Man(); Man(); Man(); Man(); Man(); } }
Это дает следующий результат:
Мужчина вошел в уборную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема заключается в том, чтобы позволить максимум 4 человекам в ванной. Как видно из выходных данных, в туалет одновременно входит только 1 человек. Вот мой код:
const int Delayx = 60; int i; int restroom = 0; int Menwaiting = 0; int Womenwaiting = 0; semaphore max_capacity; semaphore woman; semaphore man; semaphore mutex; semaphore restroomcount; void Delay(void) { int DelayTime; DelayTime = random(Delayx); for (i = 0; i<DelayTime; i++); } void Woman(void) { // for(;;){ Womenwaiting++; //wait(mutex); wait(woman); wait(max_capacity); //wait(woman); wait(mutex); wait(restroomcount); cout << "A Woman has entered Restroom"<<endl; cout << "People in the Restroom:" << restroom++ <<endl <<endl; signal(restroomcount); Womenwaiting--; Delay(); wait(restroomcount); cout << "A woman has exited Restroom"<<endl; cout << "People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Menwaiting > Womenwaiting){ signal(man); } else{ signal(woman); } //signal(max_capacity); //signal(man); // } } void Man(void) { // for(;;){ Menwaiting++; //wait(mutex); wait(man); wait(max_capacity); //wait(man); wait(mutex); wait(restroomcount); cout <<"A Man has entered the Restroom"<<endl; cout <<"People in the Restroom:" << restroom++ <<endl<<endl; signal(restroomcount); Menwaiting--; //signal(mutex); Delay(); //wait(mutex); wait(restroomcount); cout << "A man has exited the Restroom"<<endl; cout <<"People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Womenwaiting > Menwaiting){ signal(woman); } else{ signal(man); } //signal(max_capacity); //signal(woman); //} } void main() { initialsem(woman,1); initialsem(man,1); initialsem(max_capacity,4); initialsem(mutex,1); initialsem(restroomcount,1); cobegin { Woman(); Woman(); Woman(); Woman(); Woman(); Man(); Man(); Man(); Man(); Man(); } }
Это дает следующий результат:
Мужчина вошел в уборную. Одновременно допускаются только 4 человека, и мужчина и женщина не могут войти, если другой пол уже пользуется ванной. Моя проблема заключается в том, чтобы позволить максимум 4 человекам в ванной. Как видно из выходных данных, в туалет одновременно входит только 1 человек. Вот мой код:
const int Delayx = 60; int i; int restroom = 0; int Menwaiting = 0; int Womenwaiting = 0; semaphore max_capacity; semaphore woman; semaphore man; semaphore mutex; semaphore restroomcount; void Delay(void) { int DelayTime; DelayTime = random(Delayx); for (i = 0; i<DelayTime; i++); } void Woman(void) { // for(;;){ Womenwaiting++; //wait(mutex); wait(woman); wait(max_capacity); //wait(woman); wait(mutex); wait(restroomcount); cout << "A Woman has entered Restroom"<<endl; cout << "People in the Restroom:" << restroom++ <<endl <<endl; signal(restroomcount); Womenwaiting--; Delay(); wait(restroomcount); cout << "A woman has exited Restroom"<<endl; cout << "People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Menwaiting > Womenwaiting){ signal(man); } else{ signal(woman); } //signal(max_capacity); //signal(man); // } } void Man(void) { // for(;;){ Menwaiting++; //wait(mutex); wait(man); wait(max_capacity); //wait(man); wait(mutex); wait(restroomcount); cout <<"A Man has entered the Restroom"<<endl; cout <<"People in the Restroom:" << restroom++ <<endl<<endl; signal(restroomcount); Menwaiting--; //signal(mutex); Delay(); //wait(mutex); wait(restroomcount); cout << "A man has exited the Restroom"<<endl; cout <<"People in the Restroom:" << restroom-- <<endl<<endl; signal(restroomcount); signal(mutex); signal(max_capacity); if(Womenwaiting > Menwaiting){ signal(woman); } else{ signal(man); } //signal(max_capacity); //signal(woman); //} } void main() { initialsem(woman,1); initialsem(man,1); initialsem(max_capacity,4); initialsem(mutex,1); initialsem(restroomcount,1); cobegin { Woman(); Woman(); Woman(); Woman(); Woman(); Man(); Man(); Man(); Man(); Man(); } }
Это дает следующий результат:
Мужчина вошел в уборную.
Люди в уборной: 1Мужчина вышел из уборной.
Люди в уборной: 0Мужчина вошел в уборную
Люди в уборной: 1Мужчина вышел из уборной.
Люди в уборной: 0Женщина вошла в уборную
Люди в туалете: 1Женщина вышла из туалета.
Люди в уборной: 0Женщина вошла в уборную
Люди в туалете: 1Женщина вышла из туалета.
Люди в туалете: 0И так далее, навсегда.