Free考研资料 - 免费考研论坛

 找回密码
 注册
打印 上一主题 下一主题

关于读者写者的问题

[复制链接]
跳转到指定楼层
楼主
gsj5555 发表于 08-10-12 18:08:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
readcount 表示读进程计数
设置信号量:mutex是用于对计数器readcount操作的互斥信号量,writeblock表示是否允许写的信号量
int  readcount=0;
semaphore  writeblock, mutex ;
writeblock =1;  mutex=1;
reader {

   p( mutex );
   readcount++;
   if ( readcount==1)
   
     p ( writeblock );
     v ( mutex );     
     {读文件};
   
   p ( mutex );   readcount--;
  if ( readcount==0)
    v ( writeblock );
  v(mutex);

}

各位大侠请问:1。为什么要对readcount设置互斥信号量,readcount是用于计数的,难道也属于临界资源吗?

                     2。在进入读文件前为什么还要执行一次     v ( mutex )操作?,而后面又执行一个 p ( mutex ),都是什么意义?
                         如果 去掉这个V,P有什么影响吗?(红色部分)
沙发
aliu927 发表于 08-10-12 18:30:38 | 只看该作者
兄弟,那是对Readcount 进行互斥访问的,怎么叫读之前要V呢,那是和前面的P成对的好不好,,这个算法是基础
板凳
aliu927 发表于 08-10-12 18:32:30 | 只看该作者
还有那个计数器肯定是临界资源咯,如果不是的话,同时有多个读进程读的 话,那如果都修改的话,那不就出乱子了吗。。。。。
地板
 楼主| gsj5555 发表于 08-10-12 20:02:31 | 只看该作者
临界资源不是“{读文件}”吗?
5#
bamu1984 发表于 08-10-12 20:05:33 | 只看该作者
全局变量都要保护,不然改改就乱了。

在进入读文件前为什么还要执行一次 v ( mutex )操作 ?  可以允许两个进程一起读, 不 v 的话, 就是串行读, 设个计数器就没用了。

而后面又执行一个 p ( mutex ),都是什么意义? 应为要去修改计数器, 防止别的进程也去改~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|Free考研资料 ( 苏ICP备05011575号 )

GMT+8, 24-11-18 23:37 , Processed in 0.086123 second(s), 12 queries , Gzip On, Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表