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

您所在的位置:网站首页 若有n个进程都要读某个共享文件 进程P1、P2、P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。

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

2023-08-07 15:35| 来源: 网络整理| 查看: 265

进程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); } }



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3