Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录

POSIX信号量

POSIX信号量和System V信号量是不同的标准

但是实现的功能是一样的,都是为了解决同步的问题

我们说信号量指的就是资源的数量

在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的

生产者认为空间是资源,因为每次都要往里面放东西,空间会变少

消费者认为数据是资源,因为每次都会拿东西,数据会变少

POSIX的操作

初始化
cpp 复制代码
#include<semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);

第一个是声明的信号量,第二个是选项,0表示线程间共享,非0表示进程间共享,第三个表示信号量的初始值

销毁
cpp 复制代码
int sem_destory(sem_t *sem);
等待信号量(申请资源)

申请资源就是P操作

cpp 复制代码
int sem_wait(sem_t* sem);
发布信号量(放下资源)

发布信号量就是V操作

cpp 复制代码
int sem_post(sem_t* sem);

环形队列之生产消费模型

上一篇文章的生产消费模型是基于阻塞队列的,而且只用了互斥同步锁的内容,我们感觉效率其实不高,因为需要频繁考虑互斥同步问题

如果使用一个环形队列,那就只用在生产者和消费者碰头的时候考虑同步互斥问题

起始时刻,队列为空

生产者的信号量为n

消费者的信号量为0

如果队列为空,需要让生产者先运行

如果队列为满,需要让消费者先运行

除此之外,还需要互斥锁,因为消费者之间和生产者之间也需要互斥访问

相关推荐
H.2016 分钟前
centos7执行yum操作时报错Could not retrieve mirrorlist http://mirrorlist.centos.org解决
linux·centos
9毫米的幻想1 小时前
【Linux系统】—— 编译器 gcc/g++ 的使用
linux·运维·服务器·c语言·c++
helloliyh1 小时前
Windows和Linux系统安装东方通
linux·运维·windows
van叶~3 小时前
Linux探秘坊-------4.进度条小程序
linux·运维·小程序
秋风&萧瑟3 小时前
【数据结构】顺序队列与链式队列
linux·数据结构·windows
我科绝伦(Huanhuan Zhou)3 小时前
Linux 系统服务开机自启动指导手册
java·linux·服务器
hunter2062065 小时前
ubuntu终端当一段时间内没有程序运行时,自动关闭终端。
linux·chrome·ubuntu
代码讲故事7 小时前
从Windows通过XRDP远程访问和控制银河麒麟ukey v10服务器,以及多次连接后黑屏的问题
linux·运维·服务器·windows·远程连接·远程桌面·xrdp
qq_243050799 小时前
irpas:互联网路由协议攻击套件!全参数详细教程!Kali Linux入门教程!黑客渗透测试!
linux·网络·web安全·网络安全·黑客·渗透测试·系统安全
IT北辰9 小时前
Linux下 date时间应该与系统的 RTC(硬件时钟)同步
linux·运维·实时音视频