当前位置: 首页 > news >正文

进程并发-信号量经典例题-面包师问题

1 题目描述

面包师有很多面包和蛋糕,由N个销售人员销售。每个顾客进店后先取一个号,并且等着叫号。当一个销售人员空闲下来,就叫下一个号。试用信号量的P、V操作设计该问题的同步算法,给出所用共享变量(如果需要)和信号量及其初始值,并说明各自的含义。

2 条件分析

题目需要满足的要求

1 顾客之前取号要互斥,保证每一个顾客取到的号码不一样,引入mutex_sale

2 销售员叫号之间也要互斥 引入mutex_customer

3 销售员在卖面包之前,要保证1有顾客,2叫到号

4 顾客在买面包之前,要保证1 有店员 2 叫到号

3 伪代码实现

1.customer_ticket=0 //取号数  
2.sale_ticket=0  //叫号数  
3.mutex_sale=1;//销售员之间叫号要互斥  
4.mutex_customer=1;//顾客之间叫号要互斥  
5.sale_number=N;//店员人数  
6.customer_number=0//顾客人数  
7.int   
8.void Sale(void){  
9.    while(1){  
10.        P(customer_number) //等待顾客到来  
11.        P(mutex_sale);//销售员申请叫号  
12.        sale_ticket++;  
13.        V(mutex_sale);//销售员释放叫号  
14.        sell_bread(); //卖面包  
15.        V(sale_number);//释放店员占用  
16.    }  
17.      
18.}  
19.void Customers(void){  
20.    while(1){  
21.        P(mutex_customer) //申请取号  
22.        customer_ticket++;  
23.        V(mutex_customer) //释放取号  
24.        V(customer_number)  
25.        P(sale_number);//请求店员服务  
26.        buy_bread();  
27.    }  
28.      
29.}  

系列文章如下

学习过程中一定要有系统观念(知识框架,每一章开头都会有一个思维导图),知道目前自己在学习的是哪一板块的内容,和前面有什么样的联系

操作系统的很多知识点前后都是联系非常紧密的,去一点一点理解而不是死记硬背会学习的非常愉快的!!!

操作系统相关文章

概述,初步了解操作系统功能及其一些概念

操作系统(一)| 概述 作业 批处理 OS运行环境要求 基本特征-CSDN博客

进程管理部分,重头戏

操作系统(二 )| 进程控制 进程状态 进程描述 进程控制 进程同步互斥-CSDN博客

操作系统(三)| 进程管理上 进程状态 同步 互斥-CSDN博客

操作系统(三)| 进程管理下 经典进程问题分析 线程 死锁-CSDN博客

内存管理部分

操作系统(四)| 内存管理 实存储器管理 虚拟存储器管理 分页 分段式管理-CSDN博客

文件系统管理部分

操作系统(五)| 文件系统上 结构 存取方式 文件目录 检索-CSDN博客

操作系统(六)| 文件系统下 文件使用 共享 保护-CSDN博客

设备管理部分

操作系统(七)| 设备管理-- 端口 驱动程序 基本I/O控制 磁盘I/O-CSDN博客


相关文章:

进程并发-信号量经典例题-面包师问题

1 题目描述 面包师有很多面包和蛋糕,由N个销售人员销售。每个顾客进店后先取一个号,并且等着叫号。当一个销售人员空闲下来,就叫下一个号。试用信号量的P、V操作设计该问题的同步算法,给出所用共享变量(如果需要&…...

c语言练习12周(11~15)

编写double fun(int a[],int n)函数,计算返回评分数组a中,n个评委打分,去掉一个最高分去掉一个最低分之后的平均分 题干编写double fun(int a[],int n)函数,计算返回评分数组a中,n个评委打分,去掉一…...

Java 实现视频转音频功能

在实际开发中,我们经常需要处理各种多媒体文件。本文将介绍如何使用 Java 语言实现将视频文件转换为音频文件的功能。我们将使用 FFmpeg 工具来进行视频转换操作,并通过 Java 的 ProcessBuilder 实现调用系统命令执行 FFmpeg 的功能。 准备工作 首先,我们需要确保系统中已安…...

可以在Playgrounds或Xcode Command Line Tool开始学习Swift

一、用Playgrounds 1. App Store搜索并安装Swift Playgrounds 2. 打开Playgrounds,点击 文件-新建图书。然后就可以编程了,如下: 二、用Xcode 1. 安装Xcode 2. 打开Xcode,选择Creat New Project 3. 选择macOS 4. 选择Comman…...

IDC最新报告,增速减缓+AI增势,阿里云视频云中国市场第一

国际权威数据公司IDC发布 《中国视频云市场跟踪(2023 H1)》报告 自2018年至今,阿里云持续保持 中国视频云整体市场第一 整体市场占比达24.4% 01 第一之外,低谷之上 近期,国际权威数据公司IDC最新发布了《中国视频…...

常见状态码

欢迎大家到我的博客浏览。常见状态码 | YinKais Blog 常见状态码<!--more--> 1、200 200&#xff1a;服务器已经接收了请求&#xff0c;但处理还没有完成。 204&#xff1a;服务器已经成功处理了请求&#xff0c;但相应中没有任何返回内容。比如 DELETE 请求。 206&…...

Spring原理——基于xml配置文件创建IOC容器的过程

Spring框架的核心之一是IOC&#xff0c;那么我们是怎么创建出来的Bean呢&#xff1f; 作者进行了简单的总结&#xff0c;希望能对你有所帮助。 IOC的创建并不是通过new而是利用了java的反射机制&#xff0c;利用了newInstance方法进行的创建对象。 首先&#xff0c;我们先定义…...

CUDA initialization failure with error: 999

ubuntu20.04&#xff0c;安装tensorRT, 执行example里面的./sample_char_rnn程序&#xff0c;测试时候报了如标题的一个错误&#xff0c;居然如下两行代码这样解决了&#xff0c;这两行命令好像是重新加载nvidia内核模块&#xff0c;有点玄学&#xff1a; sudo rmmod nvidia_u…...

一些权限方面的思考

一些权限方面的思考 背景说明自定义注解解析自定义注解 背景 鉴权可以通过切面做抽取 说明 都是一些伪代码, 不能直接使用, 提供一种思路. 都是一些伪代码, 不能直接使用, 提供一种思路. 都是一些伪代码, 不能直接使用, 提供一种思路. 自定义注解 自定义注解: Permission …...

NX二次开发UF_CURVE_add_faces_ocf_data 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_add_faces_ocf_data Defined in: uf_curve.h int UF_CURVE_add_faces_ocf_data(tag_t face_tag, UF_CURVE_ocf_data_p_t uf_offset_data ) overview 概述 Add a face col…...

MacM1(ARM)安装Protocol Buffers

MacM1(ARM)安装Protocol Buffers 本文目录 MacM1(ARM)安装Protocol Buffers3.21之前版本安装使用configure3.22之后版本安装使用cmake使用编译后的版本 protobuf下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 在运行./autogen.sh或./configure命…...

使用C++从0到1实现人工智能神经网络及实战案例

引言 既然是要用C来实现&#xff0c;那么我们自然而然的想到设计一个神经网络类来表示神经网络&#xff0c;这里我称之为Net类。由于这个类名太过普遍&#xff0c;很有可能跟其他人写的程序冲突&#xff0c;所以我的所有程序都包含在namespace liu中&#xff0c;由此不难想到我…...

React Router

一、简介 react router是一个构建基于react应用的路由管理库。允许你在程序中定义不同的路由和导航规则。以实现不同的url路径显示不同的组件。 二、相关技术 <Router><div><ul id "menu"><li><Link to "/home">Home<…...

https 是否真的安全,https攻击该如何防护,https可以被抓包吗?如何防止呢?

首先解释一下什么是HTPPS 简单来说&#xff0c; https 是 http ssl&#xff0c;对 http 通信内容进行加密&#xff0c;是HTTP的安全版&#xff0c;是使用TLS/SSL加密的HTTP协议 Https的作用&#xff1a; 内容加密 建立一个信息安全通道&#xff0c;来保证数据传输的安全&am…...

C++中声明友元

C中声明友元 不能从外部访问类的私有数据成员和方法&#xff0c;但这条规则不适用于友元类和友元函数。要声明友元 类或友元函数&#xff0c;可使用关键字 friend&#xff0c;如以下示例程序所示&#xff1a; 使用关键字 friend 让外部函数 DisplayAge( )能够访问私有数据成员…...

【GPT-3.5】通过python调用ChatGPT API与ChatGPT对话交流

文章目录 一、引言二、AIGC简介三、OpenAI介绍四、GPT-3.5介绍五、获得OpenAI API Key六、调用ChatGPT API实现与ChatGPT对话七、参考链接 一、引言 ChatGPT 的火爆&#xff0c;成功带火了AIGC&#xff0c;让它进入大众的视野。 ChatGPT 和Whisper API 开发者现在可以通过API将…...

Vatee万腾的科技探险:vatee数字化力量的前瞻征途

在Vatee万腾的科技探险中&#xff0c;我们领略到了一场数字化力量的前瞻征途&#xff0c;这是一次引领未来的创新之旅。Vatee万腾以其独特的科技理念和数字化力量&#xff0c;开启了一次引领行业的前瞻性征途&#xff0c;为数字化未来描绘出了崭新的篇章。 Vatee万腾的数字化力…...

github使用token认证

向github提交代码时报错&#xff1a;Support for password authentication was removed on August 13, 2021. Please use a personal access token instead。大概意思就是&#xff0c;原先的密码凭证从2021年8月13日开始就不能用了&#xff0c;后续必须使用个人访问令牌&#x…...

基于C#实现线段树

一、线段树 线段树又称"区间树”&#xff0c;在每个节点上保存一个区间&#xff0c;当然区间的划分采用折半的思想&#xff0c;叶子节点只保存一个值&#xff0c;也叫单元节点&#xff0c;所以最终的构造就是一个平衡的二叉树&#xff0c;拥有 CURD 的 O(lgN)的时间。 从…...

AI智能客服搭建教程附带免费源码

*名称* *版本要求* 服务器 CPU 2核心 ↑运存 4G ↑宽带 5M ↑ 服务器操作系统 Linux Centos7 运行环境 Nginx 1.18 PHP 7.3 MYSQL 5.6 服务器配置及环境要求 PHP设置 一、安装PHP扩展插件:fileinfo、redis、 sg11 二、删除PHP对应版本中的 pcntl_signal 、pcntl_signal_dis…...

VOACAP 软件:从下载安装到首次电离层传播预测实战

1. VOACAP软件初探&#xff1a;短波通信的"天气预报员" 第一次听说VOACAP时&#xff0c;我正被短波通信的频率选择问题困扰。就像渔民出海需要查看天气预报一样&#xff0c;短波通信也需要提前知道"电离层天气"。VOACAP就是这样一个神奇的工具——它能预测…...

SpringCloud进阶--Seata与分布式事务和

起因是我想在搞一些操作windows进程的事情时&#xff0c;老是需要右键以管理员身份运行&#xff0c;感觉很麻烦。就研究了一下怎么提权&#xff0c;顺手瞄了一眼Windows下用户态权限分配&#xff0c;然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

从SQL入门到性能调优进阶,精通SQL数据库实用教程

SQL进阶教程&#xff1a;从“会查表”到“调度数据洪流”的跃迁指南 SQL入门后&#xff0c;你已能在单张表里自如翻找、增删改写——但这只是拿到了数据库城邦的游客地图&#xff1b;进阶&#xff0c;是获得一张实时交通调度图&#xff1a;它显示哪条数据通道正拥堵、哪个查询…...

UNECE R79 Rev.5深度拆解:为什么你的‘全自动驾驶’方案暂时还不能用?

UNECE R79 Rev.5深度拆解&#xff1a;为什么你的‘全自动驾驶’方案暂时还不能用&#xff1f; 当特斯拉的FSD Beta版在社交媒体上展示自动避让行人的惊艳表现时&#xff0c;很少有人注意到这些功能在欧洲市场必须经过UNECE R79法规的严格审查。这份2023年修订的转向设备法规&am…...

FPGA DDR3硬件测试避坑指南:如何设计一个可靠的读写控制器并验证全地址空间

FPGA DDR3硬件测试避坑指南&#xff1a;如何设计一个可靠的读写控制器并验证全地址空间 当你在凌晨三点的实验室里盯着示波器上跳动的DDR3信号波形&#xff0c;突然发现某个地址区间出现零星的数据错误时&#xff0c;就会明白为什么全地址测试不是可选项而是必选项。这不是关于…...

拆穿名词诈骗!用大白话理解晦涩难懂的AI概念谒

1. 架构背景与演进动力 1.1 从单体到碎片化&#xff1a;.NET 的开源征程 在.NET Framework 时代&#xff0c;构建系统主要围绕 Windows 操作系统紧密集成&#xff0c;采用传统的封闭式开发模式。然而&#xff0c;随着.NET Core 的推出&#xff0c;微软开启了彻底的开源与跨平台…...

得意黑Smiley Sans:一款能让你爱上中文排版的窄斜体黑体终极指南

得意黑Smiley Sans&#xff1a;一款能让你爱上中文排版的窄斜体黑体终极指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans&#xff1a;一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 你是否厌倦了千篇一…...

嵌入式NFC开发:轻量级NDEF解析库NDefLib详解

1. NDefLib 库概述NDefLib 是一个面向嵌入式系统的轻量级 NFC 标签操作工具库&#xff0c;专为读写 Type 4 NFC 标签上的 NDEF&#xff08;NFC Data Exchange Format&#xff09;消息而设计。其核心定位并非替代完整的 NFC 协议栈&#xff08;如 ISO/IEC 14443-4、ISO/IEC 7816…...

ViGEmBus:Windows内核级游戏控制器虚拟化技术方案

ViGEmBus&#xff1a;Windows内核级游戏控制器虚拟化技术方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款Windows内核级驱动程序&#xf…...

郭老师-人生是一场意识的修行

人生是一场意识的修行 ——六句真言&#xff0c;唤醒心灵智慧“生命不是为了抵达某个终点&#xff0c; 而是为了—— 在每一场经历中&#xff0c; 认出自己。”&#x1f33f; 真正的成长&#xff0c;是心力的成长&#xff1b; 真正的智慧&#xff0c;是心灵的智慧。&#x1f33…...