我正在尝试用我的操作系统类的伪代码编写一个程序:我们有一个带 N泵和 1M升油箱的加油站。每辆车都要求加油一定量的汽油。燃油箱由油罐车提供,只有在没有汽车加油的情况下才能将其重新装满。
如果有可用的泵,如果有足够的汽油并且油罐车没有重新加油,那么汽车只能加油。
使用伪代码编写解决方案,使用信号量和进程优化对资源的访问。
这就是我所做的:
#define M 15;
#define N 3;
sem pumps=N;
sem fuel_tank=3;
int max_capacity=M;
int request;
bool fill=false;
----
CAR:
----
wait(pumps);
request=rand()%3+1;
if(request<max_capacity && fill==false)
{
wait(fuel_tank);
refuel();
max_capacity=max_capacity-request;
signal(fuel_tank);
}
signal(pumps);
-----------
TANK TRUCK:
-----------
wait(pumps);
fill=true;
while(fuel_tank!=3)
sleep(1);
refill();
max_capacity=M-max_capacity;
fill=false;
signal(pumps);
由于这是我第一次使用信号量和进程,我不确定上面的代码是否正确并且可以正常运行。
你怎么看?有什么不对吗?