进程互斥、进程同步,信号量

要求:允许几个读者可以同时读该数据集,而一个写者不能与其他进程(不管是读者还是写者)同时访问该数据集。

两类进程:读进程、写进程

互斥关系:读进程-写进程,写进程-写进程(读进程与读进程不存在互斥关系)

semaphore rw=1;//互斥访问数据集的信号量
int count=0;//记录访问数据集的读进程数(用来实现读进程之间不发生互斥)
semaphore mutex=1;//互斥修改count值的信号量writer(){//写者进程while(1){P(rw);//相当于加锁(rw=1时说明数据集没有进程访问),rw--write;//写操作V(rw);//相当于解锁(恢复rw=1),rw++;}
}writer(){//写者进程while(1){P(rw);//相当于加锁(rw=1时说明数据集没有进程访问),rw--write;//写操作V(rw);//相当于解锁(恢复rw=1),rw++;}
}reader(){//读者进程while(1){P(mutex);//在判断count值之前先对count加锁,防止判断之后count被修改if(count==0){//先判断是否应该对数据集加锁,如果是第一个读进程(count=0)就要进行加锁;如 //果已经有读进程正在访问数据集(count>0),则跳过加锁直接访问P(rw);//对数据集加锁}count++;//修改count,把自己的进程算进总读进程数V(mutex);//修改count后,将修改count的锁解除read;//读操作P(mutex);//在执行完读操作后意味着该进程将要停止访问数据集,就要修改count,同样也要加锁count--;//修改countif(count==0){//需要判断是否应该对数据集解锁,如果已经没有读进程(count=0)就要进行解锁; //如果还有读进程正在访问数据集(count>0),则跳过解锁直接退出V(rw);//对数据集解锁锁}V(mutex);//修改count后,将修改count的锁解除}
}

PV操作读者写者问题相关推荐

  1. 《OS:PV操作 - 读者写者问题》

    经典同步问题 读者写者问题 背景:有多个读者,也有多个写者.要保证其互斥性.要求应用对应的PV操作实现. 定义: P,V操作均为原子操作 原子操作是在执行的过程中,要么全做,要么全不做,不可被CPU打 ...

  2. 【操作系统-进程】PV操作——读者写者问题

    文章目录 读者写者问题万能模板 万能模板 1--读进程优先 万能模板 2--读写公平法 万能模板 3--写进程优先 题目 1:南北过桥问题 题目 2:录像厅问题 题目 3:更衣问题 读者写者问题万能模 ...

  3. 操作系统,独木桥问题,PV操作

    问题 独木桥问题1:东西向汽车过独木桥,为了保证安全,只要桥上无车,车过桥,待一方的汽车全部过完后,另一方的汽车才允许过桥.请用信号量和PV操作来写出汽车过独木桥问题的同步算法. 思路 首先对于东西两 ...

  4. linux 信号灯的PV操作

    目录 一 回顾 二 PV操作的意思 三 代码的实现思路和用到的函数 1 第一列函数代码和解析 2 在前面基础上加上二三列 3 整合全部代码 如果读不出 一 回顾 用 semget semctl 函数分 ...

  5. 独木桥问题-PV操作解决同步问题

    问题 独木桥问题1:东西向汽车过独木桥,为了保证安全,只要桥上无车,车过桥,待一方的汽车全部过完后,另一方的汽车才允许过桥.请用信号量和PV操作来写出汽车过独木桥问题的同步算法. 思路 首先对于东西两 ...

  6. 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果

    一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...

  7. PV操作每日一题-读者写者问题

    读者写者问题 一.问题描述 二.读者优先 三.写者优先 一.问题描述 要求: 允许多个读者可以同时对文件进行执行读操作 只允许一个写者往文件中写信息 任一写者在完成写作操作之前不允许其他读者或写着进入 ...

  8. java如何解决写者优先问题_第二类读者写者问题(写者优先)的信号量及PV操作解决方案...

    要求: (1)多个读者可以同时进行读: (2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行): (3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者). 定义读者与写者两 ...

  9. java实现的PV操作经典例子:读者写者、贪睡的理发师、生产者消费者。

    其中读者写者和贪睡的理发师使用的Semaphore类:生产者消费者使用的是管程. 读者写者 class Semaphore {int value;public Semaphore(int v){thi ...

最新文章

  1. 对于读取PDF模板表单,中文无序问题
  2. Java:如何创建轻量级数据库微服务
  3. Linux 命令之 lsusb -- 显示本机的USB设备列表信息
  4. 顺序结构实现【数据结构】
  5. android 页面icon拉伸_所有同学!注意咯!!设计师不可忽略的页面转场来咯!!...
  6. 开源社交系统ThinkSNS+和ThinkSNS V4区别在哪里
  7. 浅谈配网供电可靠性及管理措施
  8. JAVA设计模式之抽象工厂模式
  9. catalyst 6500 安装配置
  10. Visual Studio 2017 设置失败、安装失败的解决方法
  11. 如何快速备份微信聊天记录到电脑
  12. SciPy教程 - 稀疏矩阵库scipy.sparse
  13. Spring Security如何防止会话固定攻击(session fixation attack)
  14. PySimpleGUI:快速开始
  15. 软件项目报价术语总结(功能点计数元素ILF、EIF、IE、EO、EQ)
  16. OpenGL使用FBO与PBO上行纹理 (YUYV)
  17. Linux云计算薪资及发展前景,云计算Linux就业方向及前景分析 2019云计算行业发展现状及前景趋势分析...
  18. 分享一个源代码:微信电影票预订(微信小程序版)
  19. mysql 查看时区_mysql 查看及修改时区的方法
  20. 面试积累-MySQL-MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?

热门文章

  1. python-dayo6-元组 字典 集合操作
  2. delphiXE下成功安装OpenCV
  3. 录音软件有哪些?这些软件值得收藏
  4. 洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树
  5. 腾讯面试题----全是代码编程题
  6. 转:决策,先想 先看 先做
  7. dota 6.67C的bug,本人测试,有图有真相(新更新TF刷F的BUG)
  8. CSS中@font-face引入字体库
  9. SCL语言的循环结构
  10. 给我设计套高端一点的线下接待流程以及话术