第二类读者写者问题:写者优先

本文介绍了一种解决第二类读者写者问题的并发控制策略,通过使用互斥变量和计数器,实现写者优先,确保了写操作的独占性和读操作的有序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二类读者写者问题:写者优先

条件:

  • 多个读者可以同时进行读
  • 写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
  • 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
互斥变量
wMutex = 1 //写互斥变量
wCountMutex = 1 //写数量记录互斥变量
rMutex = 1 // 读互斥变量
rCountMutex = 1 //读数量记录互斥变量

共享变量
wCount = 0 //写进程的数量
rCount = 0 //读进程的数量

write
// 记录写进程的数量,如果是第一个写进程则封锁读进程,保证写进程的优先级
P(wCountMutex)
    if(wCount==0)
        P(rMutex)
    wCount++;
V(wCountMutex)

// 保证写者互斥
P(wMutex)
    write
V(wMutex)

// 读完后修改写进程的数量,并在所有写进程都完成时允许读进程操作
P(wCountMutex)
    wCount--;
    if(wCount==0)
        V(rMutex)
V(wCountMutex)

read
// 首先先要保证读进程在写进程全部完成前不能进行,立即执行V操作是为了保证读操作可同时进行
// 这样的另一个目的是当有写进程来的时候也可以直接申请(rMutex),这样便可以将后续读进程锁住,保证写进程优先执行
P(rMutex)
V(rMutex)

// 统计当前的读进程的数量,并在开始时申请封锁写进程
P(rCountMutex)
    if(rCount==0)
        P(wMutex)
    rCount++
V(rCountMutex)

    read

// 当所有在写进程之前来的读进程都执行完毕后释放对写进程的封锁
P(rCountMutex)
    rCount--
    if(rCount==0)
        V(wMutex)
V(rCountMutex)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值