操作系统(经典进程同步问题)之写者优先
2017-03-27 17:57
309 查看
一个数据文件或记录可以被多个进程共享使用,我们将读文件的进程称为reader,写文件的进程成为writer。允许对个进程同属进行读取一个共享对象,因此读操作不会造成数据数据文件的混乱,但不允许reader,writer进行同时对共享文件的访问,因为这种访问会造成文件的数据混乱。所谓读者-写者问题。 读者-写者问题中,读者优先问题描述下面这种情况。 在文件的访问读取中,如果有写进程,写先进行写进程的调度,读进程在所有读进程完成后进行执行。这就是写者优先。 解决方法如下: 设置wmutex为各写者间的互斥时间访问。 设置Filemutex为文件互斥事件竞争访问 wcount为写进程的数量 rcount为读进程的数量 mutex1读进程互斥访问 mutex2写进程互斥访问
Writer:begin wait(mutex1): //申请文件的写进程 wcount = wcount+1; //文件写进程+1 if wcount = 1 then wait(Filemutex); //判断文件是不是有一个写进程,如果一个写进程申请文件使用权,确保文件无进程使用,否则写进程阻塞在这里 signal(mutex1); wait(wmutex);//申请写进程开始写 写数据; singal(wmutex);//释放写进程 wait(mutex1);//申请文件写进程 wcount = wcount - 1; //写进程-1 if wcount = 0 then singal(Filemutex);//此时,写进程为0,申请文件使用权进行释放写进程(因为写写进程互斥) singal(mutex1); end
reader:begin wait(mutex1); //读者先进行申请文件的写申请,如果能够申请到mutex1表明有写进程正在执行,此时读进程阻塞 singal(mutex1);//获取mutex1后释放,让写进程能够随时申请到写进程 wait(mutex2); rcount = rount + 1; if rcount = 0 then wait(Filemutex); singal(mutex2); wait(mutex2); 读操作; singal(mutex2); wait(mutex2) rcount = rcount -1; if rcount = 0 then singal(Filemutex); singal(mutex2); end
相关文章推荐
- 进程同步的经典问题1——读者写者问题(写者优先与公平竞争)
- 进程同步的经典问题1——读者写者问题(写者优先与公平竞争)
- 操作系统进程同步互斥经典问题之读者写者问题
- 进程同步的经典问题1——读者写者问题(写者优先与公平竞争)
- 操作系统--信号量经典同步问题之写者优先问题
- 操作系统:经典进程同步问题(2)哲学家进餐问题
- 操作系统学习-7. 经典的进程同步问题
- 操作系统--进程管理--进程同步的经典问题
- 操作系统实验进程同步--写者优先
- 操作系统进程同步三大问题:生产者消费者,哲学家进餐,读者写者问题
- 【操作系统总结】经典的进程同步问题-生产者消费者问题
- 经典进程同步问题:读者-写者问题
- 操作系统清华大学版笔记(十) 信号量、管程、条件互斥、经典同步问题(读者写者、哲学家问题)
- 计算机操作系统笔记(5)--进程管理之经典进程的同步问题
- 操作系统:经典进程同步问题(1)生产者-消费者问题
- 经典进程同步问题:读者-写者问题
- 操作系统同步互斥经典问题——读者写者问题
- 操作系统中进程同步问题的几个经典问题与解答
- 经典进程同步问题(二)——读者、写者问题
- 操作系统--信号量经典同步问题之读者优先问题