生产者/消费者问题是一个多进程进行同步的问题,需要使用信号量(semaphore)进行相关资源的控制,实现并发。一些关于并发的基础概念如下:
原子操作 一组不可分割的函数或操作。这类函数或操作的执行是不可以被中断的。
临界区 进程中一段需要访问共享资源的代码,共享资源一次只能允许一个进程访问,系统要保证进入临界区的进程不超过一个。 正常执行可以并行,临界区代码执行只能串行。

解决并发问题的核心:控制对共享资源的访问

信号量(semaphore)
用于在进程间发送信号的整形变量,该变量定义3个原子操作:

1.初始化:信号量的初始值为非负整数
2.semSignal(V):将信号量加1,如果之后信号量的值大于等于零,进程唤醒该信号量上等待的一个进程,并继续自己的执行。
3.semWait(P):将信号量减1,如果之后信号量的值为负数,调用semWait的函数将阻塞,否则进程继续执行。

互斥锁和01信号量的区别:互斥锁执行上锁和开锁的进程必须为同一进程,01信号灯可以是不同进程。

生产者/消费者问题
有一个或多个生产者,不停生产数据,将所生产的数据放到一个缓冲区中。同时有一个消费者将数据从缓冲区中取出。用信号量解决该问方法伪代码如下:

semaphore full = 0;
semaphore empty = BUFFER_SIZE;
semaphore mutex = 1;Producer()          Consumer()
{                   {produce();         P(full);P(empty);           P(mutex);P(mutex);          take();put();               V(mutex);V(mutex);          V(empty);V(full);           consume();
}                   }

生产者:生产物品 -> 请求访问缓冲区空闲的资源 (没有资源阻塞,有资源继续执行) -> 给缓冲区上锁 -> 向缓冲区添加物品 -> 给缓冲区解锁 -> 释放可用面包资源

消费者:请求访问可用物品资源(没有资源阻塞,有资源继续执行)-> 给缓冲区上锁 -> 从缓冲区拿走物品 -> 给缓冲区解锁 -> 释放可用缓冲区资源 -> 消费物品

对信号量的理解 信号量的PV操作实际上是某个进程使用和释放某资源,如果进程想要使用资源,当前资源为0那么进程就会阻塞等待资源。

信号量实现生产者消费者问题相关推荐

  1. 操作系统课设--使用信号量解决生产者/消费者同步问题

    山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...

  2. linux知识(二)互斥量、信号量和生产者消费者模型

    linux知识(二)互斥量.信号量和生产者消费者模型 一.互斥量 产生原因 二.信号量 生产者消费者模型 一.互斥量 产生原因 使用多线程常常会碰到数据混乱的问题,那么使用互斥量,相当于"加 ...

  3. Linux系统信号量实现生产者-消费者问题

    Linux系统信号量实现生产者-消费者问题 实现代码 #include<bits/stdc++.h> #include<unistd.h> #include<pthrea ...

  4. C语言使用信号量解决生产者消费者模型的同步问题

    友链 gcc 1.c -o 1 -lpthread // ..使用内存映射可以拷贝文件 /* 对原始文件进行内存映射 创建一个新文件 把新文件的数据拷贝映射到内存中 通过内存拷贝将第一个文件的内存映射 ...

  5. 信号量与生产者消费者问题

    生产者-消费者问题 生产者-消费者题型在各类考试(考研.程序员证书.程序员面试笔试.期末考试)很常见,原因之一是生产者-消费者题型在实际的并发程序(多进程.多线程)设计中很常见:之二是这种题型综合性较 ...

  6. 操作系统-信号量(生产者消费者问题)

    1.问题描述:一组生产者进程和一组消费者进程共享一个初始为空大小为n的缓冲区,只有缓冲区没满时,生产者才能给缓冲区投放信息,否则必须等待:只有缓冲区不空时,消费者才能继续取出消息,否则也必须等待.由于 ...

  7. 信号量实现生产者消费者模型

    进化版的互斥锁(N) 由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住.这样虽然达到了多线程操作共享数据时数据的正确性, ...

  8. 采用信号量机制实现消费者与生产者的线程同步_你还能聊聊常用的进程同步算法? 上篇[五]...

    点击上方 " 布衣码农 " ,免费订阅~选择" 设为星标 ",第一时间免费获得更新~ 「布衣码农」进程同步的最佳实践! 进程同步回顾 进程同步控制有多种方式:算 ...

  9. Linux 实验:记录型信号量 生产者-消费者问题详解

    进程同步问题是一个非常重要且相当有趣的问题,因而吸引了很多学者对他进行研究.本文就选取其中较为代表性的生产者-消费者问题来进行学习,以帮助我们更好的理解进程同步的概念及实现方法. 一.问题描述 有一群 ...

最新文章

  1. 一句话告诉你们什么是大数据
  2. 神经网络贷款风险评估(base on keras and python )
  3. 蚂蚁金服支付平台代码配置
  4. [转载] Java8-Stream API 详解
  5. 草稿 断开式连接 1204
  6. SQL 2005 新功能
  7. 计算机网络中什么是令牌,一个动画看懂网络原理之令牌环网的工作原理
  8. SPACEMACS 配置
  9. python如何实现输出表格_python如何以表格形式打印输出
  10. 新计算机c盘太小,电脑C盘太小,F盘太大,怎么重新调整分区容量?
  11. 相机视场角和焦距_摄像机焦距和视场角计算.doc
  12. 自然语言处理系列之:中文分词技术
  13. Ansible Inventory内置参数
  14. 「转」中文文案排版指北
  15. css中div的意思是什么
  16. Vue2竖向文字滚动
  17. Linux下使用crontab来执行定时任务计划----执行每晚12点多执行移动log日志文件操作
  18. 拒绝成为肉鸡 教你几招让黑客永远抓不到你
  19. python模拟鼠标滚动
  20. Druid监控页面配置reset-enable的说明

热门文章

  1. unity3d WayPoint路点寻路,AI
  2. 西门子PORTAL精简屏下载程序后很多参数无数据,显示####
  3. 一张图看懂世界石油分布?用Python轻松搞定!
  4. 单片机卡农c语言程序,51单片机用蜂鸣器演奏卡农
  5. git提交遇到.suo文件无法提交的问题
  6. window搭建私有云,只要几分钟
  7. 从开源到众包---写在2015“程序员”节
  8. HMI-45-【控制台】控制台代码迁移
  9. 超融合和虚拟化的区别
  10. React学习--- 事件处理