无脑让进程一口气取得所有的资源,再开始运行
- 定义大锁:`Semophore Lock = 1; //互斥信号量`
- 定义资源数:
```
//eg:有a、b、c三类资源,分别有9个、8个、5个,则:
int a = 9; // 表示a的剩余数量
int b = 8; // 表示b的剩余数量
int c = 5; // 表示c的剩余数量
```
- 代码模版:
```
Process(){
while(1){
P(Lock);
if(所有资源都够){
所有资源的int值减少; //题目回告知每类资源需要多少个。
取xxx资源; //一口气拿走所有的资源。
V(Lock); //拿完资源解锁
break; //跳出while循环
}
V(Lock); //资源不够,解锁,再循环尝试一次
}
做进程该做的事情(例如:哲学家干饭)// 用中文说明即可。
P(Lock);
归还所有资源,所有资源的int值增加。
V(Lock);
}
```
题目没有要求避免饥饿的话,用最简单的方法(读优先)可以得满分
- 读者优先:
```
semaphore lock = 1; // 用于实现对共享文件的互斥访问
int count = 0; //记录当前有几个读进程在访问文件
semaphore mutex = 1; //用于保证对count变量的互斥访问
writer(){
while(1){
P(lock); // 写之前上锁
write;
V(lock); // 写完了解锁
}
}
reader(){
while(1){
P(mutex); //各个进程互斥访问count
if(count == 0) P(lock); //第一个读者,读之前帮他的兄弟们上锁
count ++; //访问文件的读进程数+1
V(mutex);
read;
P(mutex); //各个进程互斥访问count
count—-; //访问文件的读进程数-1
if(count == 0) V(lock); //最后一个读进程负责解锁
V(mutex);
}
}
```