使用信号量解决读者写者问题--读者优先
来源:互联网 发布:算法统宗阅读 编辑:程序博客网 时间:2024/04/30 18:07
<pre>//读者优先int readcount = 0;semaphore x = 1, wsem = 1;void reader(){ while(true){ semWait(x); readcount ++ ; if(readcount == 1) semWait(wsem); semSignal(x); READUNIT();//读数据 semWait(x); readcount --; if(readcount == 0) semSignal(wsem); semSignal(x); }}void writer(){ while(true){ semWait(wsem); WRITEUNIT();//写数据 semSignal(wsem); }}</pre>
信号量x保证readCount被正确更新.wsem用于文件读写的互斥.
分析:
1:对于写进程. 如果一个写执行semWait(wsem),然后写WRITEUNIT();对于其他写进程明显回被阻塞在wsem上.而对于读进程,第1个读进if(readcount == 1) emWait(wsem);
也会被阻塞在 wsem上.而后续的读进程会被阻塞在第一个semWait(x);上.
2:如果多个读进程要读文件,那么第一个读进程在if(readcount == 1) emWait(wsem);时如果有写进程在写,转1.如果无写进程,那么wsem-1=0; 这样就保证了读的时候写进程会被阻塞在wsem上. 而后续的读进程可以直接读文件.当所有读进程都读完时if(readcount==0)semSignal(wsem); 阻塞在wsem上的写进程就可以写了.
综上所述:
(1)只有当所有读进程都读完了,写进程才可以写.
(2)或者一个写进程写完后,semSignal(wsem),可能会被读进程抢占if(readcount == 1) emWait(wsem);而写进程无法抢占读进程.
所以为读优先;
0 0
- 使用信号量解决读者写者问题--读者优先
- 使用信号量解决读者写者问题--写者优先
- 读者写者问题--使用信号量的读者优先与写者优先程序分析
- 读者写者问题--使用信号量的读者优先与写者优先程序分析
- 有名信号量实现读者-写者问题(读者优先)
- 用信号量解决读者写者问题
- 很有借鉴意义!读者写者问题--使用信号量的读者优先与写者优先程序分析
- 读者写者问题之读者优先
- C 优先读者 读者/写者问题
- 优先读者的读者/写者问题的算法设计
- linux 读者写者问题 读者优先c++
- 读者-写者优先
- 优先读者/写者问题—操作系统
- 读者写者问题(写者优先)的信号量及PV操作解决方案
- 有名信号量实现读者-写着问题(写者优先)
- 读者写者问题——读者优先,写者优先,公平竞争 解决方法
- 读者写者问题(读者优先、写者优先、公平竞争)
- 用互斥锁解决读者-写者问题
- JAVA学习之——深入分析Spring 与 Spring MVC容器
- 开发效率提升百分百的秘密
- 【背包专题汇总】
- CodeForces - 675A Infinite Sequence (模拟)水
- 快鹿徐琪事件再掀波澜,疑搬起石头砸自己的脚
- 使用信号量解决读者写者问题--读者优先
- LinearLayout 佈局介紹
- OpenID和OAuth的区别
- Rotate List
- Node-webkit中使用sqlite3
- 指尖上的电商---(8)Solr中Facet的用法
- Struts2中的ModelDriven机制及其运用
- Android提高UI流畅度
- 室内环境监测系统的设计二