进程P1、P2、P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。要求:(1)正常运行时不能产生死锁。(2)F的并发度要高。
本题实际上就是一个读者-写者问题,P1是一个读者,P2是一个写者;为了使F的并发度较高,将P3先看成读者,当其完成该操作后再将其看成写者。算法中需用到如下变量定义:
Int readcount=0; //用于对读进程的数量进行统计
Semaphore mutex=1; //用于写者与其他读者/写者互斥访问共享数据
Semaphore rmutex=1; //用于读者互斥访问计数器readcount
P1(){
While(true){
P(rmutex);
If(readcount0) P(mutex); //读者互斥访问readcount
readcount++;
V(rmutex);
read F;
P(rmutex);
readcount–;
If(readcount0) V(mutex);
V(rmutex);
}
}
P2(){
While(true){
p(mutex); //实现写者与读者互斥访问F表格
Write F;
V(mutex);
}
}
P3(){
While(true){
P(rmutex);
If(readcount0) P(mutex); //看成读者
Readcount++;
V(rmutex);
Read F;
P(rmutex);
Readcount–;
If(readcount0) V(mutex);
V(rmutex);
P(mutex); //看成写者
Write F;
V(mutex);
}
}

进程P1、P2、P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。相关推荐

  1. php编程狼和兔子山洞,一天,一只兔子在山洞前写论文, 一只狼走了过来,问:“兔子啊,你在干什么?” 兔。。。...

    一天,一只兔子在山洞前写论文, 一只狼走了过来,问:"兔子啊,你在干什么?" 兔... 兔子在山洞前写论文, 一只狼走了过来,问:"兔子啊,你在干什么?" 兔子 ...

  2. 系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;

    系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空).当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待:当缓冲区未空时,消费者进程可以从缓冲区取走一 ...

  3. php linux fork进程 多个进程/线程共享一个 socket连接 出现多个进程响应串联

    简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复现示例代码: testFork.php <?php requi ...

  4. 实例:建立一个触发器,当scott.emp被删除一条记录时,把被删除记录写到删除日志里面去

    实例:建立一个触发器,当scott.emp被删除一条记录时,把被删除记录写到删除日志里面去. --创建一个存放删除记录的表,此表此时为空表 CREATE TABLE del_emp AS SELECT ...

  5. 进程间的通信——共享内存

    下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式 ...

  6. php跨进程内存共享,进程管理与内存共享

    [toc] ## 进程管理 ### 官网实例了解进程api 根据官方实例加上注释 * 子进程异常退出时,自动重启 * 主进程异常退出时,子进程会继续执行,完成所有任务后退出 ~~~ class Pro ...

  7. docker 主进程 日志_[docker]从一个实例,一窥docker进程管理

    在Docker中,进程管理的基础是Linux内核的PID命名空间技术.在不同的PID命名空间下,可以有相同的PID. Linux内核为所有的PID命名空间维护了一个树状的数据结构,最顶层是系统初始化时 ...

  8. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  9. WinCE 调试某手写输入法时遇到的加载手写库失败的问题

    调试某手写输入法时遇到的加载手写库失败的问题 在 WinCE6.0 下使用此手写输入法 SDK 做了一个单独的手写输入程序A(MFC Dialog 框架).正常情况下,可以正常使用. 此 A 程序,采 ...

最新文章

  1. 新思科技Chekib:AI芯片架构创新面临四大挑战
  2. 第十六届全国大学生智能汽车竞赛 车模技术检查表格与技术文件
  3. Spring读取jar包外部的配置文件properties
  4. mysql 透明代理_透明代理MySQL_基于zbus的MySQL透明代理(100行)-云栖社区
  5. CodeForces - 1498E Two Houses(交互+图论,结论题)
  6. WampServer修改端口及菜单Localhost
  7. LeetCode 90. 子集 II(回溯+剪枝)
  8. 关于注册中心的CAP定理。
  9. Tip:部署sharepoint2013SP1指定SQL数据库时的小细节
  10. nagios常见错误及页面错误
  11. win10激活--以专业版(professional)为例
  12. Bytes和bits的区别(字节和位的区别)
  13. java 8 dsl_java – Spring – QueryDsl支持的高级比较器
  14. 青少年重度抑郁的动态功能连接:与严重程度和症状维度的关系
  15. NetSuite 未实现汇兑损益
  16. buck电路上下管_分时供电全桥Buck型双输入直流变换器
  17. 微信如何关闭城市服务定位服务器,位置定位微信(怎么悄悄的查对方位置)
  18. 安防视频流媒体服务器Easy NVR搭建之DASH直播平台的搭建需要具备哪些条件?
  19. 十进制转换成十六进制小程序(强制转换和移位运算符)
  20. mysql添加主键的方法

热门文章

  1. OpenOffice开发者指南笔记
  2. Firefox扩展安装
  3. 【关于VB连接EXCEL数据库以ADODB方式】
  4. Ubuntu配置git的比较工具-Meld
  5. gbk2313编码范围
  6. IOS开发之——硬件开发-蓝牙(07)
  7. vsftp客户端_[转载]安装VSftp实现ftp服务
  8. [转]这个新闻故事也太神奇了,很吸引人,都不像是新闻了
  9. 嵌入式:ARM指令集分类及编码
  10. EndNote x8/ x9基础使用教程+中文毕业论文格式GB/T 7714-2005