一、问题描述

要求:

1、允许多个读者可以同时对文件执行读操作。

2、只允许一个写者往文件中写信息。

3、任一写者在完成写操作之前不允许其他读者或写者工作。

4、写者执行写操作前,应让已有的读者和写者全部退出。

二、问题分析

 读者写者问题最核心的问题是如何处理多个读者可以同时对文件的读操作。

三、如何实现

semaphore rw = 1;   //实现对文件的互斥访问
int count = 0;
semaphore mutex = 1;//实现对count变量的互斥访问
int i = 0;
writer(){while(1){P(rw); //写之前“加锁”写文件V(rw); //写之后“解锁”}
}
reader (){while(1){P(mutex);     //各读进程互斥访问countif(count==0)  //第一个读进程负责“加锁”{P(rw);}count++;      //访问文件的进程数+1V(mutex);读文件P(mutex);     //各读进程互斥访问countcount--;      //访问文件的进程数-1if(count==0)  //最后一个读进程负责“解锁”{V(rw);}V(mutex);}
}

只要有源源不断的读进程存在,写进程就要一直阻塞等待,可能会造成“饿死”,在上述的算法中,读进程是优先的,那么应该怎么样来改造呢?

新加入一个锁变量w,用于实现“写优先”!

这里我们来分析一下读者1->写者1->读者2这种情况。第一个读者1在进行到读文件操作的时候,有一个写者1操作,由于第一个读者1执行了V(w),所以写者1不会阻塞在P(w),但由于第一个读者1执行了P(rw)但没有执行V(rw),写者1将会被阻塞在P(rw)上,这时候再有一个读者2,由于前面的写者1进程执行了P(w)但没有执行V(w),所以读者2将会被阻塞在P(w)上,这样写者1和读者2都将阻塞,只有当读者1结束时执行V(rw),此时写者1才能够继续执行直到执行V(w),读者2也将能够执行下去。

基操勿6。

该算法是一种先到先服务的算法,对读写操作相对公平。

Linux内核更多免费文档,面试资料,教程视频加qqun:891587639获取资源

四、总结

操作系统——读者写者问题相关推荐

  1. 操作系统-读者写者问题,写者优先,多个读者可以同时读书(C++实现)

    最近在学习操作系统,对读者写者问题进行了实现,还存在部分问题. 关系:读者与写者互斥.写者与写者互斥  写者优先     临界资源:书(一本)     分析:互斥可用互斥信号量mutex,写者优先可设 ...

  2. 四、操作系统——读者写者问题(详解)

    一.问题描述: 二.需要满足的条件: 写进程与写进程之间必须互斥的写入数据(因为如果两个写进程同时对共享数据中的区域A中的数据进行写操作的话,会导致数据错误覆盖的问题) 写进程与读进程之间必须互斥的访 ...

  3. 操作系统 读者写者问题的实现(C++ 读者优先、写者优先)

    通过信号量机制和相应的系统调用,用于线程的互斥和同步,实现读者写者问题.利用信号量机制,实现读者写者问题. 在windows 10环境下,创建一个控制台进程,此进程包含n个线程.用这n个线程来表示n个 ...

  4. 操作系统——读者写者问题(写者优先)

    阅读前提醒:本文代码为伪代码,仅供理解! 马上就要被关得精神失常了,也许这是我的最后一条博客了吧--() 啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈水文来咯!!!!! ...

  5. 操作系统读者写者问题代码实现

    问题分析: 读者优先: 读者进程执行: 无其他读者写者, 直接执行 有写者等, 但其他读者在读, 直接读 有写者写, 等待 写者进程执行: 无其他读写者, 直接执行 有其他读写者, 等待 写者优先: ...

  6. 操作系统-读者写者问题(写者优先)

    思路: 写者优先与读者优先类似.不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作.为此应当添加一个整型变量write_count,用于记录 ...

  7. 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)

    文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...

  8. 操作系统课程设计----读者-写者 问题(c语言)

    问题描述: 所谓读者写着问题,是指保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题.读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以 ...

  9. 操作系统中读者——写者问题的分析

    操作系统中读者--写者问题的分析 Analysis of readerwriter problem in operating system 摘要:本篇文章就操作系统中读者--写者问题进行利用记录型信号 ...

最新文章

  1. 用Javascript修正12个常见的浏览器问题
  2. (转)理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER
  3. python 细枝末节
  4. hashtable与HashMap区别
  5. 使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用
  6. Lync Server 2010的部署系列_第六章 安装配置拓扑生成器、前端Server、前端池
  7. js 获取html文字颜色,js获得网页背景色和字体色的方法
  8. 第十五回(二):文会内战平分秋色 树下阔论使坏心焦【林大帅作品】
  9. 项目组网技术方案实施要点
  10. jQuery 实现菜单
  11. Win7下如何显示文件的扩展名?
  12. ajax前面$,连续多次发送Ajax前面的请求被后面的覆盖以致不能执行的问题
  13. java视频教程之Java小白学习方法
  14. HTML caption文字颜色,HTML caption align 属性 - HTML 颜色参考手册 - 自强学堂
  15. 简单聊聊OpenWrt的UPnP协议
  16. 什么是DNS泄漏?我为什么要关心?
  17. 短信验证码登录的实现
  18. fastDFS图片服务器的一些常见错误
  19. CRPR能补偿crosstalk吗?
  20. android 发qq,腾讯发布QQ轻聊版 for Android V3.4.3版

热门文章

  1. html5图片浮层,Div层悬浮实现HTML5 Canvas背景动画
  2. FreeSWITCH实现IP分机呼叫外线
  3. 优漫动游UI设计中背景设计的六大趋势?
  4. 宝塔/服务器中的项目不在wwwroot目录下,要修改的文件
  5. 寻宝 oj_寻宝体验正在流行
  6. 解决freemarker生成的静态文件中文乱码的问题
  7. win10默认被重置的问题
  8. php如何写短信验证码,php发送短信验证码
  9. 自定义添加打印机纸张规格
  10. HTML 下拉列表select表单元素