有谁对操作系统原理熟悉?请教

heliosky 2001-11-08 09:29:34
题:读哲学家算法是否会发生饥饿(starvation)?若会应怎样改进?
Dining philosopher's problem
#define LEFT(i-1)%N
#define RIGHT(i-)%N
#define THINKING 0
#define HUNGRY 1
#define EATING 2
typedef int semaphore
int state[N];
semaphore mutex=1;
semaphore s[N];
void philosopher(int i)
{
while(TRUE){
think( );
take-chop-stick(i);
eat( );
put-chop-stick(i);}
}

void teat(i)
{
if(state[i]==HUNGRY&&state[LEFT]!=EATING&&STATE[RIGHT]!=eating)
{state[i]=EATING;V(S[i]);}
}

void take-chop-stick(int i)
{ P(mutex);
state[i]=HUNGRY;
test(i);
V(mutex);
P(s[i]);
}

void-put-chop-stick(int i)
{ P(mutex);
state[i]=THINKING;
test[LEFT];
test[RIGHT];
V(mutex);
}

下题中是否发生饥饿?为什么?
var mutex,wrt:Semaphore;
readcount:integer;
mutex:=wrt:=1;
readcount:=0;
parbegin
Readeri:begin
Wait(mutex);
readcount:=readcount+1;
if readcount=1 then Wait(wrt);
Singnal(mutex);
读数据集;
Wait(mutex);
readcount:=reascount-1;
if readcount=0 then Signal(wrt);
Signal(mutex);
end
Writeri:begin
Wait(wrt);
写数据集;
Signal(wrt);
end
coend
...全文
42 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
一个精通参数整定的人,在具体草整定参数的时候,要熟悉系统工艺原理,更要熟悉系 统操作。对待一个复杂系统如何操作的问题,整定参数的人甚至比专业的运行操作员更知道 怎么操作,比他们更熟练的进行手工干扰。因为只有我们知道怎样操作是正确的,才能够知 道PID 发出的指令是否正确的,才能够知道怎样修改PID 参数。另外,运行操作员往往抱着 一种急切的心理,看到被调量偏差大,恨不得一下子调正常。心情可以理解,往往偏离了正 常的调节方法。我们除了要整定参数外,有时候还要担负运行操作讲解员的责任。虽然在整 体系统上我们不如他们,但是具体操作上,我们的理解有比他们强的地方。互相沟通才能共 同进步,才能搞好系统。 同时,对于系统工艺操作的理解,对于实际发生的各种干扰问题,运行操作员又比我们 更熟悉。所以,我们还要虚心向他们请教。系统发生了波动,到底是什么原因造成的?什么 因素之干扰的主要因素?怎样操作弥补?了解清楚之后,再加上我们的分析,才能得到最真 实的资料。我们要记住:沟通是双向的。 切入正题,说说综合整定。假设有一个水池,上面一个进水管下面一个排水管。进水管 的流量不大确定,有时候稳定,有时候有波动。我们要调节排水阀的开度来调整水池水位。 如果水位高,我们要开排水阀放水。如果我们想要迅速平抑水位,那就要大开排水阀。大开 排水阀造成水位急剧降低,这时候我们该怎么办?水位急剧降低表明排水阀开过度了,也就 是比例带过小,水位急剧降低需要我们稍微关闭排水阀,否则水位按照目前降低的速度来看, 有可能造成水位过低。那么,关闭排水阀属于比例带的调节作用。为什么?我们还记得么? 比例作用趋势图的特征是:输出曲线和被调量是相似形。我们这里调节器是正作用,那么水 位急剧降低,我们的排水阀也应该急剧关闭。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧