文章目录

  • (1)什么是信号量
  • (2)与信号量相关的操作
  • (3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者)

(1)什么是信号量

前面的叙述中,我们通过锁保证了每次只有一个线程进入临界区,但是临界区资源很多也很大,每次只允许一个线程进入往往会使效率很低。所以如果将临界区划分为多个独立的区域,划分为多少个区域就让多少个线程进入,,但是这样就同时带来了一个问题——如果划分为了5个区域,但是同时进入了10个线程该怎么办?所以这一点可以通过信号量解决。信号量可以理解为一个计数器,它用来描述临界资源的有效个数

信号量由一个值和一个指针组成,指针指向等待该信号量的线程。信号量的值表示相应资源的使用情况,比如如果S>=0表示资源够用,如果执行P操作表示请求分配一个资源,那么S就会减一;当S<0时表示已经没有可用资源(此时S的绝对值表示等待该资源的线程数)请求者必须等待其他线程释放资源方可继续运行。如果执行一个V操作就表示会释放一个资源,所以S加一

(2)与信号量相关的操作

1:要使用信号量就需要创建一个sem_t类型变量

Linux系统编程40:多线程之基于环形队列的生产者与消费者模型相关推荐

  1. [Linux]生产者消费者模型(基于BlockQueue的生产者消费者模型 | 基于环形队列的生产者消费者模型 | 信号量 )

    文章目录 生产者消费者模型 函数调用角度理解生产者消费者模型 生活角度理解生产者消费者模型 为什么要使用生产者消费者模型 生产者消费者模型优点 321原则 基于BlockingQueue的生产者消费者 ...

  2. Linux系统编程---17(条件变量及其函数,生产者消费者条件变量模型,生产者与消费者模型(线程安全队列),条件变量优点,信号量及其主要函数,信号量与条件变量的区别,)

    条件变量 条件变量本身不是锁!但它也可以造成线程阻塞.通常与互斥锁配合使用.给多线程提供一个会合的场所. 主要应用函数: pthread_cond_init 函数 pthread_cond_destr ...

  3. 嵌入式Linux系统编程学习之九基于文件描述符的文件操作

    文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...

  4. 【README】Linux系统编程必读:本专栏内容提要以及系统调用接口总结

    文章目录 前言 第一部分:博客知识点 (1)基础篇 Linux系统编程1:Linux中使用率最高的一些命令 Linux系统编程2:详解Linux中的权限问题 Linux系统编程3:基础篇之详解Linu ...

  5. 【Linux下】 线程同步 生产者与消费者模型

    文章目录 [Linux下] 线程同步 生产者与消费者模型 线程同步 同步概念与竞态条件 条件变量 条件变量本质 操作条件变量 初始化和销毁条件变量 等待 唤醒 通过条件变量实现的简单线程同步例子 为什 ...

  6. 【Linux】生产者消费者模型-基于环形队列实现

    1.环形缓冲区的优势 在上篇博客基于阻塞队列的生产者消费者模型中我介绍了什么是生产者消费者模型以及生产者-消费者模式,还没了解的可以戳链接查看. 基于阻塞队列的实现,虽然简单,但是对内存分配性能要求较 ...

  7. Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型

    文章目录 (1)生产者与消费者模型概述 (2)生产者与消费者模型优点 (3)基于阻塞队列(blockingqueue)的生产者消费者模型(单消费者单生产者) (4)基于阻塞队列(blockingque ...

  8. linux多线程编写哲学家,Linux系统编程(三) ------ 多线程编程

    一.线程的创建和调度 1.线程是程序执行的某一条指令流的映像. 为了进一步减少处理机制的空转时间,支持多处理器及减少上下文切换开销,进程在演化中出现了另一个概念--线程.它是进程内独立的一条运行路线, ...

  9. Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】

    linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...

最新文章

  1. 19.VS属性管理器窗口不见了怎么办?
  2. 批量关闭电脑有害端口方法
  3. VC,Windbg,gdb执行到指定代码行方法
  4. 多态性与虚拟函数一个典型的例子第一步
  5. 汇编——NT中读取MBR内容
  6. 从“嵌入式”到“物联网”有哪些变化?
  7. elementUI表格组件:自定义列模板(完整案例)
  8. 第六章:fusionChart的例子
  9. Linux基础系列4(ls,cp命令详解)
  10. php面向对象、语法【访问成员的情形:外和方法内调用对象的关键字this】、构造函数的场景和析构函数的场景...
  11. centos7.3 防火墙设置
  12. [BZOJ1668][Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
  13. linux下verilog功能验证,Verilog 条件语句介绍
  14. Windows科研工具
  15. U盘插上后在“安全删除硬件”中不显示的解决方案
  16. 星星城堡童装加盟雾非雾
  17. 笔记本连接手机热点并共享网络给台式机
  18. Shell脚本之正则表达式以及文本编辑器
  19. MIUI12 安卓12刷面具root 理论适合所有小米机型和系统版本 小米10实测 小米11实测
  20. 74HC595 芯片详细介绍

热门文章

  1. mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
  2. java excel 插件开发工具_程序员常用的15 种开发者工具推荐
  3. 什么配置的电脑可满足基因组索引构建的需求?
  4. 哈佛大学单细胞课程|笔记汇总 (三)
  5. 中科院单细胞分析算法开发博士带你做单细胞转录组分析
  6. ps图案叠加如何导入?Photoshop添加图案叠加的详细操作
  7. linux打开pythonshall,linux系统shell脚本后台运行python程序
  8. python 结构体数组_python实现结构体数组(初始化并赋值)
  9. python交流群教学视频_自学 Python,视频教程和代码一看就懂,动手就废,应该这么学...
  10. 【ES7(2016)】Array.prototype.includes()