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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 操作系统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);  //对箱子与蛋糕差值进行一个资源释放的过程就是为里面放了一个资源,就是放了一个箱子
    }
}
相关文章
|
1月前
|
存储 物联网 调度
操作系统的心脏:内核深度解析
在数字世界的构建中,操作系统扮演着基石的角色,而其核心—内核,则是这一复杂系统的灵魂。本文将深入探讨操作系统内核的工作原理,揭示它是如何管理硬件资源、运行程序以及提供系统服务的。通过理解内核的结构和功能,我们可以更好地把握计算机系统的运作机制,进而优化和创新我们的技术实践。
|
2月前
|
设计模式 算法 安全
实时操作系统(RTOS)深度解析及Java实现初探
【10月更文挑战第22天】实时操作系统(RTOS,Real-Time Operating System)是一种能够在严格的时间限制内响应外部事件并处理任务的操作系统。它以其高效、高速、可靠的特点,广泛应用于工业自动化、航空航天、医疗设备、交通控制等领域。本文将深入浅出地介绍RTOS的相关概念、底层原理、作用与功能,并探讨在Java中实现实时系统的方法。
87 1
|
29天前
|
存储 人工智能 安全
操作系统的心脏——内核深度解析
【10月更文挑战第29天】 本文深入探讨了操作系统的核心组件——内核,包括其定义、功能、架构以及在现代计算中的重要性。通过对比不同操作系统内核的设计哲学和技术实现,揭示了内核如何影响系统性能、稳定性和安全性。此外,文章还讨论了未来内核技术的潜在发展方向,为读者提供了一个全面了解内核工作原理的平台。
|
26天前
|
存储 消息中间件 算法
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。
|
1月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
70 2
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
22 1
|
1月前
|
开发工具 Android开发 数据安全/隐私保护
探索移动应用的世界:从开发到操作系统的全面解析
【10月更文挑战第33天】在数字化时代,移动应用已成为我们日常生活中不可或缺的一部分。本文将深入探讨移动应用的开发过程,包括编程语言、开发工具和框架的选择,以及如何构建用户友好的界面。同时,我们还将分析移动操作系统的核心功能和安全性,以帮助读者更好地理解这些应用程序是如何在各种设备上运行的。无论你是开发者还是普通用户,这篇文章都将为你揭示移动应用背后的奥秘。
|
2月前
|
Java C语言 iOS开发
MacOS环境-手写操作系统-16-内存管理 解析内存状态
MacOS环境-手写操作系统-16-内存管理 解析内存状态
41 0
|
24天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
64 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
72 0

推荐镜像

更多