📄 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 + -