关于管程的问题

oslinux 2003-10-16 09:34:22
刚刚看了一些有关管程的问题,有些地方不是很明白
就如生产消费的问题
void append(char x)
{
while(count==N) //原为if
cwait(notfull)
buffer[nextin]=x;
nextin=(nextin+1)%N;
count++;
cnotify(notempty);
}

void take(char x)
{
while(count==0) //原为if
cwait(notempty)
x=buffer[nextout];
nextout=(nextout+1)%N;
count--;
cnotify(notfull);
}

书中解释道:
if语句被while循环取代,因此,这个方案导致对条件变量至少多一次格外的测试……

何谓“多一次”格外测试?
小弟不明白 谁可以解释???
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oslinux 2003-10-21
  • 打赏
  • 举报
回复
up
oslinux 2003-10-19
  • 打赏
  • 举报
回复
count 不是条件变量啊

程序已说明 有两个条件变量 notempty notfull啊
fierygnu 2003-10-18
  • 打赏
  • 举报
回复
如果是if,那么条件满足后执行cwait,cwait返回后就继续执行了,不再检查count的值。而用
while(count==0) //原为if
cwait(notempty)
cwait返回后会继续检查count,直到count!=0才会继续。
demolx 2003-10-18
  • 打赏
  • 举报
回复
up
zeng_xiangyang 2003-10-17
  • 打赏
  • 举报
回复
我也觉得奇怪
oslinux 2003-10-17
  • 打赏
  • 举报
回复
是 《操作系统内核与设计原理》中文版得

liupengfei81 2003-10-16
  • 打赏
  • 举报
回复
up

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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