读写者问题

读写者问题关注的是保证写者进程与其他进程互斥访问共享对象,防止并发访问导致的数据不一致。该问题包括读读共享、写写互斥、读写互斥三个原则。文中介绍了两种解决方案:读进程优先和写进程优先,前者可能导致写者饥饿,后者可能导致读者饥饿。
摘要由CSDN通过智能技术生成

**

读写者

**

在这里插入图片描述

只要求读文件的进程称为reader进程,其他进程称为writer进程。
允许多个进程同时读一个共享对象,但不允许一个writer进程和其他reader进程同时或writer进程同时访问一个共享对象。
简单来说,读写者问题是保证一个writer进程必须与其他进程互斥的访问共享对象的同步问题。
三句话来说,就是:
读读共享;写写互斥;读写互斥

读者-写者问题是一个经典的并发程序设计问题,是经常出现的一个同步问题。
如果读者来:

无读者、写者,新读者可以读
有写者等待,但有其他读者正在读,新读者可以读
有写者写,新读者等

如果写者来:

无读者,新写者可以写
有读者,新写者等待
有其他写者,新写者等待

现在开始分析读写者的

解决方案

读进程优先**

无需修改就可用于多个读进程和写进程的情况。写进程非常简单,信号量用于实施互斥,只要一个写进程正在访问共享数据区,其他的写进程和读进程都不能访问它。读进程也使用信号量实施互斥,但是,为允许多个读进程,当没有读进程正在读时,第-一个试图读的读进程需要在信号量上等待。当至少已经有一个读进程在读时,随后的读进程无需等待,可以直接进入。全局变量count用于记录读进程的数目,信号量mutex用于确保count被正确地更新。

int count=0;  //用于记录当前的读者数量
semaphore mutex=1;  //用于保护更新count变量时的互斥
semaphore rw=1;  //用于保证读者和写者互斥地访问文件
writer () {
     //写者进程
    while (1){
   
        P(rw
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值