多生产者-多消费者问题

文章目录

        • 1 问题描述
        • 2 问题分析
        • 3 代码实现
        • 4 分析总结

1 问题描述

桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时,爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出水果。
在这里插入图片描述

2 问题分析

  1. 关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
    多生产者-多消费者问题关系分析如下:

互斥关系: 对缓冲区(盘子)的访问要互斥地进行
同步关系(一前一后):

  1. 父亲将苹果放入盘子后,女儿才能取苹果
  2. 母亲将橘子放入盘子后,儿子才能取橘子
  3. 只有盘子为空时,父亲或母亲才能放入水果

注意:“盘子为空”这个事件可以由儿子或女儿触发,事件发生后才允许父亲或母亲放水果

  1. 整理思路。根据各进程的操作流程确定P、V操作的大致顺序。

由以上的同步、互斥关系分析,将多生产者-多消费者问题描绘出图形:
在这里插入图片描述

  1. 设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。
    (互斥信号量初值一般为 1,同步信号量的初始值要看对应资源的初始值是多少)
    本问题中信号量设置如下:
  semaphore mutex = 1;    //实现互斥访问盘子(缓冲区)semaphore apple = 0;    //盘子中有几个苹果 semaphore orange = 0;   //盘子中有几个橘子semaphore plate = 1;    //盘子中还可以放多少个水果
  1. 模型实现:
    在这里插入图片描述
    dad:先准备一个苹果,放苹果之前,先判断盘子里是否为空(P一下盘子,检查盘子中还可以放多少个水果),然后再将苹果放入进去(V一下苹果,数量+1)
    mom:先准备一个橘子,放橘子之前,先判断盘子里是否为空(P一下盘子,检查盘子中还可以放多少个水果),然后再将橘子放入进去(V一下橘子,数量+1)
    daughter:拿苹果之前,先判断盘子里有没有苹果(P一下苹果,若没有苹果,自己被阻塞),然后告诉父母,盘子为空了(V一下盘子)
    son:拿橘子之前,先判断盘子里有没有橘子(P一下橘子,若没有橘子,自己被阻塞),然后告诉父母,盘子为空了(V一下盘子)

以下实现了所有进程之间的同步关系:在这里插入图片描述
还需要实现各个进程对盘子(缓冲区)的互斥访问:
就是所有进程对盘子进行PV操作,即加锁和解锁的过程
在这里插入图片描述

3 代码实现

 semaphore mutex = 1;    //实现互斥访问盘子(缓冲区)semaphore apple = 0;    //盘子中有几个苹果 semaphore orange = 0;   //盘子中有几个橘子semaphore plate = 1;    //盘子中还可以放多少个水果dad (){while(1){准备一个苹果;P(plate);P(mutex);向盘子中放苹果;V(mutex);V(apple);       //允许女儿进程取苹果}
}
mom (){while(1){准备一个橘子;P(plate);P(mutex);向盘子中放橘子;V(mutex);V(orange);        //允许儿子进程取橘子}
}
daughter (){while(1){P(apple);P(mutex);从盘子中取出苹果;V(mutex);V(plate);           //允许父母进程进程向盘子中取放水果吃苹果;}
}
son (){while(1){P(orange);P(mutex);从盘子中取出橘子;V(mutex);V(plate);           //允许父母进程进程向盘子中取放水果吃橘子;}
}

4 分析总结

  1. 问题:可不可以不用互斥信号量?
    结论:即使不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象
    原因在于:本题中的缓冲区大小为1,在任何时刻,apple、orange、plate三个同步信号量中最多只有一个是1。因此在任何时刻, 最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…
  1. 若将缓冲区设置为2会发生什么现象?
    父亲P(plate),可以访问盘子→母亲P(plate),可以访问盘子→父亲在往盘子里放苹果,同时母亲也可以往盘子里放橘子。于是就出现了两个进程同时访问缓冲区的情况,有可能导致两个进程写入缓冲区的数据相互覆盖的情况。

因此,如果缓冲区大小大于1,就必须专门设置一个互斥信号量mutex来保证互斥访问缓冲区。

  1. 总结:在生产者-消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现 互斥访问缓冲区的功能。当然,这不是绝对的,要具体问题具体分析。
  1. 建议:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。 但需要注意的是,实现互斥的P操作一定要在实现同步的P操作之后,否则可能引起“死锁”。

理解理清复杂的同步关系:
在分析同步问题(一前一后问题)的时候不能从单个进程行为的角度来分析,要把“一前一后”发生的事看做是两种“事件”的前后关系。

比如,如果从单个进程行为的角度来考虑的话,我们会有以下结论:

  1. 如果盘子里装有苹果,那么一定要女儿取走苹果后父亲或母亲才能再放入水果
  2. 如果盘子里装有橘子,那么一定要儿子取走橘子后父亲或母亲才能再放入水果
  3. 这么看是否就意味着要设置四个同步信号量分别实现这四个“一前一后”的关系了?
    在这里插入图片描述

正确的分析方法应该从“事件”的角度来考虑

我们可以把上述四对“进程行为的前后关系”抽象为 一对“事件的前后关系”

  1. 盘子变空事件→放入水果事件。“盘子变空事件”既可由儿子引发,也可由女儿引发;
  2. “放水果事件” 既可能是父亲执行,也可能是母亲执行。
  3. 这样的话,就可以用一个同步信号量解决问题了
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​Nat. Commun.速递:深度学习在计算生物学中的应用综述

来源:集智俱乐部作者:郭瑞东 审校:梁金 编辑:邓一雪摘要蛋白质结构预测是计算生物学中一个长达半个世纪的重大挑战,最近,深度学习在这方面取得了前所未有的进展。4月1日,一项发表在 Nature Comm…

吸烟者问题

文章目录1 问题描述2 问题分析3 代码实现:1 问题描述 假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中,第一…

无人驾驶出租车遭警察拦截后欲“潜逃”,AI 是原罪?

整理:苏宓出品:CSDN(ID:CSDNnews)所谓开车在路上,最讨厌的有几种人,一是插自己队和不让自己插队的,二想必就是晚上开远光灯和不开灯的。在交通交规下且汽车正常行驶过程中&#xff0…

人工智能,装在罐子里

来源:学术头条作者:Rich Heimann“装在罐子里的大脑”(brain in a jar)是一项对脱离身体、生活在一罐食物中的人类大脑进行的思想实验。这个思维实验探索了人类对现实、心灵和意识的概念。本文将探讨一个反对人工智能(…

10 操作系统第二章 进程管理 死锁、死锁的处理策略 银行家算法

文章目录1 死锁1.1 死锁定义1.2 死锁、饥饿、死循环的区别1.3 死锁产生的必要条件1.4 什么时候会发生死锁1.5 死锁的处理策略1.6 死锁的概念小结2 死锁预防2.1 破坏互斥条件2.2 破坏不剥夺条件2.3 破坏请求和保持条件2.4 破坏循环等待条件2.5 预防死锁小结3 死锁避免3.1 安全序…

短期记忆容量必需有限

来源:CreateAMind介绍一篇论文:预测性大脑的短期记忆能力肯定是有限的短期保持信息的能力可能是人类认知的一个标志, 因为它是许多领域所需要的,如感知、行动计划和语言。没有大脑的这一核心功能,人类无法思考、推理或计算,甚至可能无法感知。尽管短期记…

读者-写者问题

文章目录1 问题描述2 问题分析3 代码实现1 问题描述 有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时…

9 操作系统第二章 进程管理 管程

文章目录1 管程1.1 为什么引入管程1.2 管程的定义和基本特征1.3 管程小结1 管程 1.1 为什么引入管程 产生原因:信号量机制存在的问题:编写程序困难、易出错 能不能设计一种机制,让程序员写程序是不需要再关注复杂的PV操作,使得代…

2021年世界科技进展100项

来源:三思派 作者:李万,钱娅妮1生命、生物、医药健康01新冠疫情1. 首次看清新冠患者体内蛋白质变化中国科学家分析出新冠肺炎死亡患者体内多器官组织样本中蛋白质分子病理全景图,相当于将医生在显微镜下看到的人体感染新冠病毒后细…

图灵奖获得者、信息安全常青树Adi Shamir:从密码学到AI对抗性样本研究|智源大会嘉宾风采...

来源:智源大会导读:RSA 算法是通信、金融产业中被广泛使用的安全基本机制,是信息时代的支柱技术。而在这个跨时代算法背后的设计者之一,正是密码学先驱 Adi Shamir。除了RSA 公钥密码算法以外,零知识证明、差分密码分析…

11 操作系统第三章 内存管理 内存的基本知识 内存管理 内存空间扩充 连续分配管理方式

文章目录1 内存概念1.1 内存作用1.2 逻辑地址VS物理地址1.3 装入的三种方式1.3.1 绝对装入1.3.2 可重定位装入1.3.3 动态重定位装入1.4 链接的三种方式1.4.1 静态链接1.4.2 装入时动态链接1.4.3 运行时动态链接1.5 内存的基础知识小结2 内存管理2.1 内存管理的任务2.2 内存保护…

Nature长文:打破AI黑盒的“持久战”

来源:大数据文摘2020年2月,随着 COVID-19在全球迅速传播且抗原检测难以获得,一些医生转向人工智能(AI)来尝试诊断病例。一些研究人员采用深度神经网络通过查看X射线和胸部计算机断层扫描(CT)扫描来快速区分患有COVID-19肺炎的人和未患肺炎的人…

12 操作系统第三章 内存管理 非连续分配管理方式 基本分页存储管理 基本分段存储管理 段页式存储管理

文章目录1 基本分页存储管理1.1 什么是分页存储1.2 重要的数据结构——页表1.3 基本地址变换机构1.4 具有快表的地址变换机构1.4.1 什么是快表(TLB)1.4.2 引入快表后,地址的变换过程1.4.3 地址变换过程小结1.5 两级页表1.5.1 单级页表存在的问…

13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略

文章目录1 虚拟内存1.1 传统存储管理方式的特征、缺点1.2 局部性原理1.3 虚拟内存主要特征1.4 如何实现虚拟内存技术1.5 虚拟内存的基本概念小结2 请求分页管理方式2.1 页表机制2.2 缺页中断机构2.3 地址变换机构2.4 请求分页管理方式小结3 页面置换算法3.1 最佳置换算法 OPT3.…

视觉意识的主动推理模型

来源:CreateAMind论文介绍:在这里,我们旨在通过推进全球神经元工作区的扩展(预测性全球神经元工作区(PGNW))来克服这些限制,该工作区将 GNW 的基本方面与更近期的(贝叶斯)主动推理方法相结合,以理解大脑功能。具体来说,我们提出了一个基于主动推理的视觉…

14 操作系统第四章 文件管理 文件逻辑结构 文件目录结构

文章目录1 初识文件管理1.1文件属性1.2 文件内部的数据应该怎样组织起来?1.3 文件之间应该怎样组织起来?1.4 操作系统应该向上提供哪些功能?1.5 文件应如何存放在外存?1.6 文件系统总览2 文件逻辑结构2.1 文件分类2.2 顺序文件2.3…

AlphaFold 和 AI 蛋白质折叠革命的下一步是什么

来源:ScienceAI编辑:萝卜皮十多年来,分子生物学家 Martin Beck 团队一直在努力拼凑世界上最难的拼图游戏之一:人类细胞中最大分子机器的详细模型。这种被称为核孔复合体的庞然大物控制着分子进出细胞核的流动,也就是基…

15 操作系统第四章 文件管理 文件的物理结构 文件存储空间管理

文章目录1 文件的物理结构 (文件分配方式)1.1 文件块、磁盘块1.2 文件分配方式——连续分配1.3 文件分配方式——链接分配1.3.1 链接分配——隐式链接1.3.2 链接分配——显式链接1.3.3 链接分配(总结)1.4 文件分配方式——索引分配…

专访微软Greg Yang,构建神经网络的底层语言,探索AI的“万物理论”

来源:智源社区为了进一步解读这一工作背后的意义,智源社区采访了论文一作、微软研究院高级研究员Greg Yang(杨格)。采访中,我们不仅了解了Transfer的背景,以及项目背后更为远大的目标,也了解到了…

16 操作系统第四章 文件管理 文件的基本操作 文件共享 文件保护 文件系统的层次结构

文章目录1 文件的基本操作1.1 创建文件1.2 删除文件1.3 打开文件1.4 关闭文件1.5 读文件1.6 写文件1.7 文件基本操作小结2 文件共享2.1 基于索引结点的共享方式(硬链接)2.2 基于符号链的共享方式(软链接)2.3 文件共享小结3 文件保…