?? phylosop.cpp
字號:
//filename:zhexuej.cpp
//time:3/11/2005
#include <iostream.h>
#include <stdlib.h>
int chopstick[5]={1,1,1,1,1};
int rmutex=4;
int P(int &s)
{
return --s;
}
void V(int &s)
{
++s;
}
void p1()
{
void p2();
void p3();
void p4();
void p5();
int i;
i=P(rmutex);
if(i<0)
{
cout<<"僅剩一只筷子!"<<endl;
V(rmutex);
return;
}
i=P(chopstick[0]);
if(i==0)
{
cout<<"P1拿到他的左邊的筷子!"<<endl;
switch(rand()%8+1)
{
case 1:p2();break;
case 2:p3();break;
case 3:p4();break;
case 4:p5();break;
}
i=P(chopstick[4]);
if(i==0)
{
cout<<"P1拿到他的右邊的筷子,可以進餐...!"<<endl;
cout<<"P1進餐完畢,已經放下他手中的筷子,開始思考問題...!"<<endl;
}
else
{
cout<<"P1右邊的筷子正在用,所以P1放下他左手的筷子!"<<endl;
V(chopstick[4]);
}
}
V(rmutex);
V(chopstick[0]);
}
void p2()
{
void p3();
void p4();
void p5();
int i;
i=P(rmutex);
if(i<0)
{
cout<<"僅剩一只筷子!"<<endl;
V(rmutex);
return;
}
i=P(chopstick[1]);
if(i==0)
{
cout<<"P2拿到他的左邊的筷子!"<<endl;
switch(rand()%8+1)
{
case 1:p1();break;
case 2:p3();break;
case 3:p4();break;
case 4:p5();break;
}
i=P(chopstick[0]);
if(i==0)
{
cout<<"P2拿到他的右邊的筷子,可以進餐...!"<<endl;
cout<<"P2進餐完畢,已經放下他手中的筷子,開始思考問題...!"<<endl;
}
else
{
cout<<"P2右邊的筷子正在用,所以P2放下他左手的筷子!"<<endl;
V(chopstick[0]);
}
}
V(rmutex);
V(chopstick[1]);
}
void p3()
{
void p4();
void p5();
int i;
i=P(rmutex);
if(i<0)
{
cout<<"僅剩一只筷子!"<<endl;
V(rmutex);
return;
}
i=P(chopstick[2]);
if(i==0)
{
cout<<"P3拿到他的左邊的筷子!"<<endl;
switch(rand()%8+1)
{
case 1:p1();break;
case 2:p2();break;
case 3:p4();break;
case 4:p5();break;
}
i=P(chopstick[1]);
if(i==0)
{
cout<<"P3拿到他的右邊的筷子,可以進餐...!"<<endl;
cout<<"P3進餐完畢,已經放下他手中的筷子,開始思考問題...!"<<endl;
}
else
{
cout<<"P3右邊的筷子正在用,所以P3放下他左手的筷子!"<<endl;
V(chopstick[1]);
}
}
V(rmutex);
V(chopstick[2]);
}
void p4()
{
void p5();
int i;
i=P(rmutex);
if(i<0)
{
cout<<"僅剩一只筷子!"<<endl;
V(rmutex);
return;
}
i=P(chopstick[3]);
if(i==0)
{
cout<<"P4拿到他的左邊的筷子!"<<endl;
switch(rand()%8+1)
{
case 1:p1();break;
case 2:p2();break;
case 3:p3();break;
case 4:p5();break;
}
i=P(chopstick[2]);
if(i==0)
{
cout<<"P4拿到他的右邊的筷子,可以進餐...!"<<endl;
cout<<"P4進餐完畢,已經放下他手中的筷子,開始思考問題...!"<<endl;
}
else
{
cout<<"P4右邊的筷子正在用,所以P4放下他左手的筷子!"<<endl;
V(chopstick[2]);
}
}
V(rmutex);
V(chopstick[3]);
}
void p5()
{
int i;
i=P(rmutex);
if(i<0)
{
cout<<"僅剩一只筷子!"<<endl;
V(rmutex);
return;
}
i=P(chopstick[4]);
if(i==0)
{
cout<<"P5拿到他的左邊的筷子!"<<endl;
switch(rand()%8+1)
{
case 1:p1();break;
case 2:p2();break;
case 3:p3();break;
case 4:p4();break;
}
i=P(chopstick[3]);
if(i==0)
{
cout<<"P5拿到他的右邊的筷子,可以進餐...!"<<endl;
cout<<"P5進餐完畢,已經放下他手中的筷子,開始思考問題...!"<<endl;
}
else
{
cout<<"P5右邊的筷子正在用,所以P5放下他左手的筷子!"<<endl;
V(chopstick[3]);
}
}
V(rmutex);
V(chopstick[4]);
}
void main()
{
char ch;
while(1)
{
for(int i=0;i<5;i++)
chopstick[i]=1;
switch(rand()%5+1)
{
case 1:p1();break;
case 2:p2();break;
case 3:p3();break;
case 4:p4();break;
case 5:p5();break;
}
cout<<"Continue...(y/n)?"<<endl;
cin>>ch;
if(ch=='N'||ch=='n')
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -