尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
读者写者模式
读者写者模式与生产者消费者模式很类似但是他们两个有一个本质的区别消费者会把数据取走而读者只是读。这篇文章简单的介绍一下读者写者模式读者写者模式主要在读多写少的情况下通过读读并发来提高效率而对于写多的情况锁冲突就会加大效率也就不那么可观了。在读者写者模式中有一种载体两种角色三种关系当然生产者消费者模式也是同样的分析方法载体就是用于存放所写数据的缓冲区两种角色是读者和写者一般情况下读者和读者是并发关系读者和写者是互斥关系写者和写者是互斥关系读写者不像生产者和消费者只操作缓冲区的头尾他们可能会读/写不同位置所以很难实现读写并发像生产者消费者模式的核心是阻塞队列一样读者写者模式的核心是读写锁接下来我将写一下读写锁的伪代码讲清楚读写锁怎么实现上述的三种关系lock w_lock //写者锁 int count //记录读者数量的计数器 lock c_lock //计数器锁 //reader P(c_lock) //加锁 count if(count 1) P(w_lock)//加锁阻塞写者 V(c_lock) //解锁 读操作... ... P(c_lock) //加锁 --count if(count 0) P(w_lock)//加锁放行写者 V(c_lock) //解锁 //writer P(w_lock) 写操作... ... V(w_lock)我用一句话总结上述的读写锁读者和写者争抢同一把锁一但读者得到锁就会把其他所有读者放行进来直到所有读者读完写者才能拿到锁。这是一种读者优先的策略。下面是另一种策略也就是写者优先lock w_lock //写者锁 int count //记录读者数量的计数器 lock c_lock //计数器锁 lock stop_lock//阻止读者进入的锁 //reader P(stop_lock)//加锁 P(c_lock) //加锁 count if(count 1) P(w_lock)//加锁阻塞写者 V(c_lock) //解锁 V(stop_lock)//解锁 读操作... ... P(c_lock) //加锁 --count if(count 0) P(w_lock)//加锁放行写者 V(c_lock) //解锁 //writer P(stop_lock) P(w_lock) 写操作... ... V(w_lock) V(stop_lock)我用一句话来总结这个策略一旦写者有读的意愿那么之后想读的读者就无法再读等到之前的读者结束之后就可以开始写了读者优先会导致写者饥饿写者优先会导致读者饥饿。这里我没有讲多写者等其他变种
RELATED

相关推荐

前端动态布局实战:Flexbox与Grid的进阶应用

前端动态布局实战:Flexbox与Grid的进阶应用

1. 自适应布局的核心挑战与解决思路前端开发中最让人头疼的场景之一,就是面对动态内容时的布局适配问题。上周我接手的一个后台管理系统项目就遇到了典型情况:用户自定义的仪表盘需要容纳数量不定的数据卡片,从3个到30个都有可能,…

📅 2026/9/12 3:58:34
Docker镜像操作全攻略:拉取、推送与清理

Docker镜像操作全攻略:拉取、推送与清理

1. 容器镜像操作基础认知第一次接触Docker时,我被各种镜像操作命令搞得晕头转向。直到有次生产环境部署卡在镜像下载环节两小时,才真正明白这些基础操作的重要性。容器镜像就像集装箱里的货物清单,没它再好的码头也运转不起来。镜像操作主要解…

📅 2026/8/24 20:52:36
太仓实体商家做线上推广,GEO 落地经验总结

太仓实体商家做线上推广,GEO 落地经验总结

先问个问题:你在豆包、DeepSeek里搜过自家店名加“太仓”两个字吗? 太仓一个做精密机械的老周试了一下,回来脸都绿了。他在本地做了十几年,设备、品控、客户口碑都在线,结果AI推荐了五家“太仓精密机械供应商”&#…

📅 2026/8/24 20:52:36
MORE NEWS

更多资讯

📰

AI编程工具选型实战:金融与工业场景下的交付级决策指南

1. 这不是“AI编程工具横评”,而是一份真实项目交付现场的选型手记Codex、Claude Code、Cursor——这三个词最近半年在技术群、GitHub讨论区和内部技术分享会上出现的频率,已经高到让我不得不把它们从“尝鲜列表”挪进“生产环境准入清单”。我带的两个团…

📰

多模型统一管理:自建AI网关实现一个Key调用所有大模型

2026年了,AI编程工具早就成了开发者的常规装备,但你打开自己的项目配置,大概率还是能看到一堆散落的 API Key:DeepSeek 的、通义千问的、智谱的、Kimi 的,可能还有公司内部微调模型的。每个平台一套 Key,每…

📰

搞定多人游戏同步底层,性能优化不再玄学

搞定多人游戏同步底层,性能优化不再玄学 学会语法却不知怎么搭项目,这是很多转行做游戏开发的人最大的坎。你背熟了 C++ 指针,Python 装饰器,却面对一个“100人同屏”的需求时脑子一片空白。多人游戏的核心不是画布,而是 状态同步 与…

📰

基于微信小程序与Spring Boot的健身管理系统设计与实现

又到一年毕业设计选题季,很多同学在“做得出”和“有亮点”之间反复纠结。如果你正在找这类平衡点,我强烈建议你认真看看“基于微信小程序实现健身管理系统”这个方向——它属于典型的中等复杂度项目:比传统网页版管理系统更有层次感&#xf…

📰

Steam家庭共享最佳实践5个避坑指南

Steam家庭共享最佳实践5个避坑指南 官方文档太长抓不住重点,很多兄弟配置完发现游戏根本打不开,或者被账号风控搞得头大。其实 Steam 家庭共享机制早已迭代,老教程全是坑。今天直接上 最佳实践…

📰

EMQX Trace API 配置查看与更新:`/tracing` 接口实现与实战解析

EMQX Trace API 配置查看与更新:/tracing 接口实现与实战解析 【免费下载链接】emqx The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 导读 EMQX 的在线追踪&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬