当前位置:网站首页>读者写者模型
读者写者模型
2022-07-05 05:21:00 【abs(ln(1+NaN))】
类似于生产者消费者模型,读者写者模型也是有一份临界资源,两个角色,三种关系,读者写者模型的特点在于 :
(1) 写者(线程)少,读者(线程) 多
(2) 读者不会取走临界资源
画黑板报就是一个典型的读者写者模型,画板报的人只有一个(即写者),但是读黑板报的人有多个(即读者),下面就以这个例子来介绍读者写者模型。
目录
一、模型中的三种关系
两个角色指的是读者角色和写者角色,三种关系指的是读者和读者、写者和写者、读者和写者。
1、写者和写者
每次画黑板报的都只能有一个,两个人同时画的话,一个人画消防主题,另一个人却在画动物主题,这并不是我们想看到的。
==》所以写者和写者之间是互斥关系,必须要等一个人画完,才能让下一个画
2、读者和写者
有的时候,你可能认为,画黑板报和读黑板报是可以同时进行的,但是画的过程中,读的人可能无法get到你在画什么,明明你在画龙,读的人却说你在画蛇。这就引起误解了,所以应该等写者画完,读者再读。这是一个理解角度
另一个角度就是,读者还在读,写者却想把板报给擦了,很显然这就矛盾了,所以我们应该让读者读完,写者再擦。
两个角度都说明,读者和写者之间是互斥关系
3、读者和读者
一个人读不会影响另一个人读,这里就不存在什么互斥关系了。==》读者和读者之间没有关系
二、读写锁加锁/解锁的基本原理
Linux为读者写者提供了相应的锁 —— 读者锁和写者锁
我们使用读者的数目作为临界资源,即 int readers = 0;
1、读者加锁/解锁
读者加锁函数的声明如下:
因为读者和读者之间是没有关系的,所以加锁和解锁是两个独立的过程
加锁 = 读黑板报的人加1
解锁 = 读黑板报的人减1
//加锁
lock();
readers++;
unlock();
//解锁
lock();
readers--;
unlock();
2、写者加锁/解锁
写者加锁函数的声明如下:
当有读者在的时候,即readers 不为0时,写者就无法修改内容,此时加锁以后,必须要等写者写入内容以后,才能解锁
//加锁
lock();
while(readers > 0)
{
wait(); //进入条件变量等待
}
modify(); //用来表示写者修改内容的操作
//解锁
unlock(); //一般修改完内容就解锁
三、优先级问题
在前面说明读者和写者的关系时,我们从两个角度分析了他们的关系。一个是写者优先,我还没写完,你们都别读;另一个是读者优先,我还没读完,你别擦。
在实际使用的时候,我们更多的会选择读者优先,毕竟少数服从多数,读写者模型的最基本的特征就是读者多,写者少。也就是写者的重要性不如读者。
读者优先:读者和写者同时到来的时候,读者优先进入访问
写者优先:当读者和写者同时到来的时候,比当前写者晚来的读者,都不要进入临界区访问了,等
临界区没有读者了,即readers = 0时,写者先写入。
边栏推荐
- Haut OJ 1352: string of choice
- Shell Sort
- Pause and resume of cocos2dx Lua scenario
- Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
- 发现一个很好的 Solon 框架试手的教学视频(Solon,轻量级应用开发框架)
- A preliminary study of sdei - see the essence through transactions
- 嵌入式数据库开发编程(零)
- 2022/7/1學習總結
- 支持多模多态 GBase 8c数据库持续创新重磅升级
- Solon Logging 插件的添加器级别控制和日志器的级别控制
猜你喜欢
质量体系建设之路的分分合合
Yolov5 ajouter un mécanisme d'attention
[轉]: OSGI規範 深入淺出
Embedded database development programming (zero)
嵌入式数据库开发编程(五)——DQL
Research on the value of background repeat of background tiling
十年不用一次的JVM调用
利用HashMap实现简单缓存
Download and use of font icons
Stm32cubemx (8): RTC and RTC wake-up interrupt
随机推荐
[turn]: Apache Felix framework configuration properties
Bubble sort summary
对象的序列化
Optimization scheme of win10 virtual machine cluster
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
支持多模多态 GBase 8c数据库持续创新重磅升级
Yolov5 adds attention mechanism
2022上半年全国教师资格证下
JVM call not used once in ten years
[binary search] 34 Find the first and last positions of elements in a sorted array
利用HashMap实现简单缓存
YOLOv5添加注意力机制
[turn to] MySQL operation practice (I): Keywords & functions
2022/7/2 question summary
[depth first search] 695 Maximum area of the island
Gbase database helps the development of digital finance in the Bay Area
动漫评分数据分析与可视化 与 IT行业招聘数据分析与可视化
【ES实战】ES上的native realm安全方式使用
Solon Auth 认证框架使用演示(更简单的认证框架)
[turn]: OSGi specification in simple terms