1、读者优先:

semaphore rmutex = 1;
semaphore resource = 1;
int readcount = 0;void reader()
{while(true){wait(rmutex);if(readcount == 0)wait(resource);readcount++;signal(rmutex);......reading......wait(rmutex);readcount--;if(readcount == 0) signal(resource);signal(rmutex); }
}
void writer()
{while(true){wait(resource);.......writing;.......signal(resource);}
}
int main()
{cobeginreader(); writer();coend
}

2、公平原则:

semaphore rmutex = 1;
semaphore resource = 1;
semaphore serviceQueue = 1;  //用于实现公平原则(按先来先服务原则排队,// 当等于1时信号量的阻塞队列队头获得执行权力,否则排后面)
int readcount = 0;void reader()
{while(true){wait(serviceQueue);  wait(rmutex);  if(readcount == 0)wait(resource);readcount++;signal(rmutex);signal(serviceQueue);......reading......wait(rmutex);readcount--;if(readcount == 0) signal(resource);signal(rmutex); }
}
void writer()
{while(true){wait(serviceQueue);wait(resource);.......writing;.......signal(resource);signal(serviceQueue);}
}
int main()
{cobeginreader(); writer();coend
}

3、写者优先:


semaphore resource = 1;  //用于写者和写者、读者和写者互斥访问文件
semaphore wmuter = 1; //用于写者和写者互斥访问writercount
semaphore rmutex = 1; //用于互斥访问readcount
semaphore readTry = 1; //用于实现写者优先
int readcount = 0;   //记录当前读者数量
int writercount = 0;  //记录当前写者数量//模拟1:
//写者1(执行完第1部分,被剥夺处理机),读者1,写者2,写者1(执行刚才剩下的)
//当写者1写完了,先使用文件的是写者2(只有写者2也写完了且没有其他写者了,才会
//signal(readTry),读者才有机会用文件
//模拟2:
//读者1(执行完第1部分,被剥夺处理机),写者1,读者2,读者1(继续读)
//读者1读完后,先使用文件的是写者1
void reader()
{while(true){//第1部分 wait(readTry); wait(rmutex);    if(readcount == 0)wait(resource);readcount++;signal(rmutex);siganal(readTry);//第1部分end......reading......wait(rmutex);readcount--;if(readcount == 0) signal(resource);signal(rmutex); }
}
void writer()
{while(true){//第1部分 wait(wmutex);writercount++;if(writercount == 1)wait(readTry);sigal(wmutex);//第1部分endwait(resource);.......writing;.......signal(resource);wait(wmutex);writercount--;if(writercount == 0)signal(readTry);signal(wmutex);}
}
int main()
{cobeginreader(); writer();coend
}

读者问题:3种解决办法伪代码相关推荐

  1. win10突然只剩下c盘和d盘了_电脑C盘爆满飘红?系统卡?试试这两种解决办法

    编辑:晴晨 很多朋友在使用电脑时有一种习惯,就是将各种文件放到桌面,其中视频类.图纸类文件占用空间最多,比如下载个高清电影,随随便便都是几个G起步,好一点的片源可能要十几个G,所以再多的C盘空间也不够 ...

  2. BindingException异常第一种解决办法

    BindingException异常第一种解决办法 参考文章: (1)BindingException异常第一种解决办法 (2)https://www.cnblogs.com/domisong/p/1 ...

  3. eclipse安装ADT插件重启后不显示Android SDK Manager和Android Virtual Device Manager图标的一种解决办法

    下面说的这种情况是在正确安装ADT插件的前提下,重启eclipse后,工具栏中没有显示图标的一种解决办法. 你要是觉得正确安装了插件怎么可能会显示不出来的话,那...那我能说什么好呢,也不能骂你是吧, ...

  4. activiti mysql数据库表_Mysql安装activiti数据库的2种解决办法

    Mysql安装activiti数据库的2种解决办法: 第一种: 1.在mysql中创建数据库名字叫 'activiti'   2.将mysql-connector-java-5.1.27.jar文件复 ...

  5. JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法

    原文地址:http://www.cnblogs.com/taven/p/3351841.html JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spr ...

  6. vue.js 引用背景图 background 无效的3种解决办法

    #vue.js项目中,出现css调用background背景图无效?如何解决? 或者调用<img>标签,也无效果? 直接上代码,自行对比查找一下: 效果图预览 1. 正确的代码,示例如下: ...

  7. java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...

    常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...

  8. 电脑上mysql数据库无法登录_无法远程登入MySQL数据库的几种解决办法MySQL综合 -电脑资料...

    方法一: 尝试用MySQL Adminstrator GUI Tool登入MySQL Server,Server却回复错误讯息:Host '60-248-32-13.HINET-IP.hinet.ne ...

  9. linux三个命令模式切换,ubuntu16.04命令行模式和图形界面互相切换的两种解决办法,...

    ubuntu16.04命令行模式和图形界面互相切换的两种解决办法, 在ubuntu中,我们可以有两种工作模式,一种是纯字符的命令行模式,这种界面没有那么好操作,而且对命令要求比较熟悉,比较适合专业人士 ...

最新文章

  1. @Slf4j注解介绍
  2. centos java 指令_Centos 命令方式下载JDK1.7
  3. matlab p-tite分割图像,P'tite fourmi
  4. 12月9日 php环境的安装和基本知识的学习
  5. Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)
  6. 考研计算机专业课复习,考研中计算机专业课的复习考试.pdf
  7. 【转载保存】大型推荐系统架构图设计图
  8. Luke的各版本下载
  9. Linux开放端口、关闭防火墙操作
  10. sql取最大值的那一行_SQL高级功能
  11. 为什么.class文件查看不了_恕我直言,这可能是你见过最详细的class文件结构分析
  12. 做数据分析,别再乱用RFM模型了!
  13. 虚拟打印机 服务器,cimfax64位系统虚拟打印机安装.pdf
  14. 进图形界面黑屏的解决办法
  15. C# 图片与byte[]转换
  16. HA集群强制进行Active/Standby切换的命令
  17. ML:机器学习模型的稳定性分析简介、常见的解决方法之详细攻略
  18. 服务器cpu散热器性能,用于大型服务器CPU冷却的散热器性能研究.pdf
  19. 安全至上---ASP“动网论坛”漏洞分析
  20. 【转】sp,lr,pc即汇编语言中几个常见寄存器的使用

热门文章

  1. 为何python不好找工作-谁说Python找工作难?人生苦短,Python工程师你们还好吗?...
  2. python自动化办公入门书籍-用python进行办公自动化都需要学习什么知识呢?
  3. 学python能做什么类型的工作-做自动化,学python要到那种程度呢?
  4. python快速入门教程-Python快速入门
  5. 长语音识别_长文本语音识别_语音 识别 - 云+社区 - 腾讯云
  6. 地铁票务管理系统_地铁票务管理工作总结
  7. python用户画像_新闻个性化推荐系统源码之构建离线用户和文章特征
  8. cvpr2020 人脸检测与识别_CVPR2020 论文分类下载 「人脸识别+目标检测」
  9. SpringCloud--GateWay搭建及路由转发规则介绍
  10. 计算机网络实验5以太网链路帧实验,计算机网络实验-使用Wireshark分析以太网帧与ARP协议.docx...