免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2029 | 回复: 5
打印 上一主题 下一主题

OS,问一个p,v操作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-22 00:58 |只看该作者 |倒序浏览
有这样的一道题:
阅览室共有200个座位,读者进入时必须先在一张登记表上登记,该登记表为每一座位列一表目,包括座号和读者姓名等,读者离开时要销掉登记的信息。试用PV操作描述读者进程之间的同步关系。
答案是这样的:
算法的信号量有三个:seats,表示阅览室是否有座位,初值为200;readers,表示阅览室里的读者数,初值为0;用于登记或注销互斥的信号量s,初值为1。

读者进入阅览室:
while(1)
{
P(seats);        //是否有座位
P(s);                //是否有人在登记
填写登记表;
V(s);                //登记完毕
进入阅览室;
V(readers);        //读者个数加1
}

读者离开阅览室:
while(1)
{
P(readers);        //阅览室是否有人在读书
P(s);                //是否有人在注销
销掉登记;
V(s);                //注销完毕
离开阅览室;
V(seats);        //释放一个座位资源
}

我做的解是这样的:
算法的信号量有两个:seats,表示阅览室是否有座位,初值为200;用于登记或注销互斥的信号量s,初值为1。

读者进入阅览室:
while(1)
{
P(seats);        //是否有座位
P(s);                //是否有人在登记
填写登记表;
V(s);                //登记完毕
进入阅览室;
}

读者离开阅览室:
while(1)
{
P(s);                //是否有人在注销
销掉登记;
V(s);                //注销完毕
离开阅览室;
V(seats);        //释放一个座位资源
}

不知道我做的对不对,难到如果两合作进程一定要使用2个信号量表示吗?书上也有个题:对N个缓冲区的读写,怎么用PV实现同步。上面也用3个变量。搞不明白,为什么不能象我上面做的方法那样去实现呢?
还请高手指教,谢谢先。

论坛徽章:
0
2 [报告]
发表于 2004-12-23 12:45 |只看该作者

OS,问一个p,v操作的问题

谢谢各位费时间读我的帖子

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-12-23 13:32 |只看该作者

OS,问一个p,v操作的问题

你做的也对,只不过是不能统计出读者的数目。

论坛徽章:
0
4 [报告]
发表于 2004-12-23 13:49 |只看该作者

OS,问一个p,v操作的问题

若阅览室没人,还要去做注销,岂不玩完?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-12-23 13:53 |只看该作者

OS,问一个p,v操作的问题

[quote]原帖由 "greatchoice"]若阅览室没人,还要去做注销,岂不玩完?[/quote 发表:


^_^,是啦,偶和楼主都大意啦。

论坛徽章:
0
6 [报告]
发表于 2004-12-24 22:05 |只看该作者

OS,问一个p,v操作的问题

原帖由 "aero" 发表:


^_^,是啦,偶和楼主都大意啦。



就是,就是。呵呵,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP