int wan =m;
int a[n] = {1,1,1,1,1......n}
semaphore mutex = 1;
P哲学家(){
while(1){
p(mutex)
//只有条件满足才能进入下一步,否则继续等待
if(wan<=0){
v(mutex);continue;
}
if(!(a[i]==1&&a[i+1]==1)) {
v(mutex);continue;
}
//条件满足进入下一步
wan--;
a[i]=0;a[i+1]=0;
v(mutex)
拿碗
拿筷子
进餐
a[i]=1;a[i+1]=1;
wan++
放碗筷
}
}
通用模板:
特点:只有一类进程,要占用多种资源才能运行
- 1、定义大锁:Semaphore Lock = 1//互斥信号量
- 2、定义若干int型变量
有a,b,c三类资源,分别有9,8,5个。则int a = 9,int b = 8,int c = 5; - 3、使用while一口气拿完所有资源,那不完就一直while
- 4、while跳出,做该做的事情
- 5、使用锁来一口气归还所有资源
代码模板:
process(){
while(1){
P(Lock);
if(所有资源都够){
所有资源int值都减少 //题目会告诉你每类资源要几个
取xxx资源 //一口气那完所有资源
V(Lock);
break; //跳出while循环
}
V(Lock);//资源不够的情况
}//while 循环结束
做进程该做的十二(如则学家干饭)
P(Lock)
所有int ++,
一口气归还所有资源
V(Lock)
}