读者写者模型

一、什么是读者写者模型?

同上篇博客中提到的生产者消费者模型类似,我们可以把读者写者模型简单的概括为“三二一”原则

所谓的“三”指的是三种关系,分别为:

(1)写者与写者:互斥关系
(2)读者与读者:既不同步也不互斥
(3)读者与写者:同步关系(读者优先或者写者优先),互斥关系(读者读完了写者才能写,写者写完了读者才能读,这样保证了数据的有效性)

所谓的“二”指的是:读者和写者

所谓的“一”指的是:一个读写场所

二、读者写者模型与生产者与消费者模型的区别

我们可以将生产者当做是读写模型中的写者,消费者当做是读写模型中的读者。

但是在生产者与消费者模型中,消费者与消费者的关系是互斥的,而对于我们的读写模型中的读者与读者是没关系的。

这两种模型的最大区别是:在生产者消费者模型中,生产者产生数据,消费者必须把数据拿走,才算是消费成功了。但是对于我们的读写模型来说,读者只需读到数据即可,它不需要拿走数据。

三、自旋锁与挂起等待锁

挂起等待锁:当线程申请资源失败时,它会挂起等待(操作系统将它挂起)。比如互斥锁和二元信号量。

自旋锁:当线程申请资源失败时,它会一直在当前检测锁位置处轮寻锁的状态来看资源是否能被申请。不断检测的过程叫作自旋(操作系统将它自旋)。

那么如何来选择这两种类型的锁呢?我们来根据线程在临界区需要等待的时间长短来进行选择,需要在临界区等待时间长的线程选择挂起等待锁,而等待时间段的线程选择自旋锁。

了解以上内容我们就来说说在读写模型中最重要的一个知识点——读写锁

读写锁是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者,但不能同时既有读者又有写者。

上述文字中提到了并发这个概念,那么什么是并发呢?并发是一段时间内因为CPU切换导致的若干线程同时运行的现象叫作并发。它是通过线程或进程的来回切换实现的。

接下来我们来看看读写锁的具体接口吧!

(1)创建与销毁读写锁——pthread_rwlock_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值