操作系统2020年8月生产消费者问题解析思路

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 操作系统2020年8月生产消费者问题解析思路


首先我们先看题把题中的关键字找出来


通过题目中我们可以找到一下一些关键信息

1.仓库的使用权一次只能一个人用

2.蛋糕和箱子之间的关系,有箱子才能放蛋糕,没有箱子就不能放蛋糕,所以我们放蛋糕申请到仓库以后想要放必须要有箱子

3.根据过程它给出的函数对应的操作

4.题中给出的变量以及初值

好了,这些关键信息我们找完以后我们开始分析


蛋糕进仓库的这个代码过程


第一步

首先是再其它地方去了一个蛋糕,这是它的第一步


那么要填的空我们要思考,如果有了蛋糕我们需要考虑有没有箱子以及申请仓库的使用权,所以就要用到蛋糕与箱子数量差值的这个变量,第一就是先申请差值(这个差值可以理解为在仓库中又一个箱子可供使用)


所以第一个空就是


wait(delta)


第二步


我们申请完箱以后就要申请仓库的使用权,所以这一步就是我们申请仓库使用权

wait(depot)

然后蛋糕被放进去了,


第三步就是


signal(depot)

在用完仓库的使用权以后我们是要去释放的(可以理解为归还仓库钥匙)


现在我们到了箱子进仓库的代码了


可以看到开始和蛋糕的第一步的代码是一样的,但是我们要考虑一个问题就是在存放蛋糕的时候必须要有箱子才能放蛋糕,而存放箱子的时候没有蛋糕这个步骤所以我们


第一步


直接申请仓库使用权

wait(depot)


第二步


箱子被放进去以后我们就要出去了,所以要把仓库的钥匙归还

signal(depot)

然后可以看到在箱子这个循环中最后一句的代码是对蛋糕与箱子差值的进行了一个资源释放的操作,可以理解wait是-1的操作,而signal是+1的操作。需要注意再完成一个生产消费者的问题当中 wait signal 都是成对出现的,如果你做完题发现你的这两个关键字对不上号,那么必然是出现问题了。回去检查整个代码。


而这个题中整个的代码行走过程就



process putCake()
{while(true)
    {    
        fetchacake();
        wait(delta);   //在执行这一步的时候如果箱子的差值为0即仓库中没有箱子可以放蛋糕,那么就跳出这个循环
        wait(depot);   //申请仓库使用权
        putinacake();
        signal(depot); //释放仓库使用权
    }
}
porcess putBox()
{while(true)
    {
        fetchabox();
        wait(depot);  //申请仓库使用权
        putinabox();
        signal(depot); //释放仓库使用权
        signal(delta);  //对箱子与蛋糕差值进行一个资源释放的过程就是为里面放了一个资源,就是放了一个箱子
    }
}
相关文章
|
6天前
|
存储 人工智能 安全
操作系统的心脏:内核深度解析
【8月更文挑战第13天】 在数字世界的每一次跳动中,都能感受到操作系统内核的强大生命力。本文将带你走进操作系统的核心——内核,揭示它如何协调和管理计算机硬件资源,保证软件运行的高效和稳定。从内核的定义和功能,到它的结构和设计哲学,再到现代操作系统中的创新与挑战,我们将一起探索这个让计算机系统“活着”的秘密所在。
22 3
|
7天前
|
算法 安全 调度
操作系统的心脏:内核深度解析
【8月更文挑战第12天】 本文将带你进入操作系统的核心—内核,探索其设计、功能和工作原理。我们将通过通俗易懂的语言和生动的比喻,让你轻松理解这个复杂但至关重要的主题。无论你是计算机科学的初学者,还是有一定基础的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起揭开操作系统内核的神秘面纱,探索它的奥秘吧!
19 3
|
14天前
|
算法 程序员
理解操作系统内存管理:页面置换算法全解析
大家好,我是小米,热爱分享技术的大哥哥!今天聊的是操作系统中的页面置换算法。它解决的是内存满载时,如何选择合适的页面移出以腾出空间的问题。主要有三种算法:FIFO(先进先出),简单但性能不佳;LRU(最近最久未使用),考虑时间局部性,性能较好但实现较复杂;OPT(最佳置换),理论上最优但无法实际应用。这些算法各有千秋,在实际应用中需根据场景选择最合适的方案。希望这能帮大家更好地理解内存管理的核心机制!
30 2
|
18天前
|
开发框架 Android开发 iOS开发
探索移动应用的无限可能:从开发到操作系统的全链路解析
在数字时代,移动应用成为人们日常生活和工作中不可或缺的一部分。本文深入探讨了移动应用的开发流程、技术选型以及与移动操作系统之间的紧密联系。通过分析当前市场上流行的移动操作系统特点,我们揭示了不同平台为应用开发带来的独特挑战和机遇。文章还讨论了移动应用的未来趋势,包括跨平台开发框架的兴起和人工智能技术的整合,旨在为读者提供一个全面而深刻的视角,理解移动应用背后的复杂世界。
|
17天前
|
安全 程序员 Linux
探索操作系统的核心:用户态与核心态的深度解析
本文介绍了操作系统中用户态与核心态的概念,两者分别代表程序执行的不同权限级别。用户态限制应用程序访问敏感资源以确保安全,而核心态赋予操作系统完全控制权以管理硬件和内存。文章详细解释了这两种状态的重要性、区别以及如何在二者之间进行切换,包括通过系统调用、异常和中断等方式。理解这些概念对于确保系统的稳定性和安全性至关重要。
42 3
|
24天前
|
传感器 数据采集 监控
ERP系统中的生产过程监控与质量管理解析
【7月更文挑战第25天】 ERP系统中的生产过程监控与质量管理解析
35 0
ERP系统中的生产过程监控与质量管理解析
|
24天前
|
监控 数据可视化 调度
ERP系统中的生产排程与生产效率分析解析
【7月更文挑战第25天】 ERP系统中的生产排程与生产效率分析解析
50 0
|
24天前
|
监控 数据可视化 调度
ERP系统中的生产计划优化与生产效率提升解析
【7月更文挑战第25天】 ERP系统中的生产计划优化与生产效率提升解析
66 0
|
14天前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
42 6
|
7天前
|
开发者 Python
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
28 1

推荐镜像

更多