当前位置: 首页 > article >正文

线程POSIX信号量/基于环形队列的⽣产消费模型

一,POSIX线程信号量

信号量的本质就是一个计数器,也是对资源的预定机制,POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源⽬的。但 POSIX可以⽤于线程间同步。

1,初始化信号量

参数:

sem:传入sem_t类型数据

pshared:0表⽰线程间共享,⾮零表⽰进程间共享

value:信号量初始值

2,销毁信号量

3,等待信号量

4,发布信号量

二,基于环形队列的⽣产消费模型

基础理论:

上一次⽣产者-消费者的例⼦是基于queue的,其空间可以动态分配,现在基于固定⼤⼩的环形队列重写这 个程序(POSIX信号量):

其中head代表消费者,tail代表生产者,每个格子用信号量表示,在默认的情况下,全空或者全满的时候指向同一个位置。

任何人在访问资源之前都必须申请信号量:
对生产者来讲:剩余空间

对消费者来讲:剩余数据

我们先拿单生产单消费来描述条件:

1,消费者,生产者同时访问同一个位置:

        1.1,为空

                保证生产者,原子性先生产

        1.2   为满

                保证消费者,原子性先消费

2,非情况一情况

        生产者和消费者一定不在同一个位置

        消费者和生产者可不可以同时进行并发访问?

总结:

1,无法套一个圈

2,消费者无法超过生产者

3,同一个位置,互斥同步

4,在不同位置,并发

代码实现:


http://www.kler.cn/a/571354.html

相关文章:

  • Docker安装Jaeger链路追踪平台
  • 家禽(驴、鸭、猪)-图像分类数据集
  • 1分钟,实现传感器通过串口服务器接入ZWS云
  • golang编程思考(1)——作用域
  • 【金融量化】Ptrade中如何获取各类回测数据?
  • 初始提示词(Prompting)
  • 009---基于Verilog HDL的单比特信号边沿检测
  • C语言文件操作学习笔记:从基础到实践
  • Spring WebFlux WebSocket 连接保持策略
  • 深入探索像ChatGPT这样的大语言模型-02-POST training supervised finetuning
  • ioday2----->标准io函数
  • python二级考试中会考到的第三方库
  • LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)
  • 对于基于RuleOS的DApp,如何进行安全的权限管理和访问控制?
  • 文本挖掘+情感分析+主题建模+K-Meas聚类+词频统计+词云(景区游客评论情感分析)
  • 项目升级golang版本
  • 初探WebAssembly
  • PyTorch 源码学习:GPU 内存管理之初步探索 expandable_segments
  • Hutool一个类型转换工具类 `Convert`,
  • 轻量服务器与普通云服务器区别是什么