信号量——基于环形队列的生产消费模型

1. 引入

基于阻塞队列的生产消费模型,把中间的交易场所、也就是特定数据结构的内存空间,看作了一个整体。

阻塞队列是被当作一个整体使用的,使用一个锁,来保证数据安全。

但是把共享资源看作多份的话,可以让多个生产者、消费者去访问。

比如,一个数组被分成三份,就可以允许三个线程不加锁地分别访问被分离的三份资源。

但是如果线程大于3个呢?此时要保证,同一时间,访问资源的,依旧只有3个线程

这里就可以引入信号量。

2. 信号量

如何理解信号量:信号量(也称为信号灯,这个翻译不好),它的本质是一把计数器 ,类似于 int cnt=n; 用于描述临界资源中资源数量的多少!

打个比方:一个电影放映厅,有100个座位,就要发售100张票。

当我们看电影的时候,我们还没去看电影前,要先买票。买票的本质:就是对资源的预订机制 !

票数的计数器,每卖一张票,计数器就要减1,放映厅里面的资源就少---个!

当票数的计数器到0之后,资源就已经被申请完毕了。

把临界资源分成多块,让多个进程来并发访问 不同块的资源,以此提高效率。

申请到信号量,就说明将来,一定会有临界资源的一份给你这个线程。

线程竞争一个内部有很多份资源的临界资源时,首先去竞争信号量,

所以信号量本身,也是原子的。所以归还信号量,信号量++;申请信号量,信号量-。

这两个操作也要保证是原子的。很简单,加锁就可以实现

3. 基于环形队列的生产消费模型

环形队列采用数组模拟,用模运算来模拟环状特性

相关推荐
feng_you_ying_li8 小时前
linux之网络层
linux·运维·网络
未来之窗软件服务8 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
小雉系统8 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
thethefighter9 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
用户8351414049499 小时前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器
Escalating_xu9 小时前
【Linux 网络编程】ARP 的具体过程与 ARP 欺骗:一条 IP → MAC 映射,怎样改变数据的去向?
linux·网络·tcp/ip
进击的荆棘10 小时前
MySQL——在ubuntu环境下安装MySQL
数据库·mysql·ubuntu
坚定的共产主义生产设备永不宕机10 小时前
服务器从裸机开始搭建ESXI虚拟机
linux·服务器·网络
刚入门的大一新生10 小时前
Linux-线程封装
linux·运维·服务器