二、进程管理(四)经典同步互斥问题

news/2024/5/10 14:18:24/文章来源:https://blog.csdn.net/weixin_74059671/article/details/128039960

目录

4.1生产者-消费者问题

4.1.1单类生产者-单类消费者问题

4.1.2多类生产者-多类消费者问题

4.1.3吸烟者问题

4.2读者-写者问题

4.3哲学家进餐问题


分析进程同步和互斥问题的三步:

  1. 关系分析:分析问题中的同步(前驱关系)、互斥关系。 
  2. 写出进程:根据问题写出各个进程的P/V操作顺序和必要操作顺序。
  3. 信号值设置:确定各个PV操作的信号量名称和值。

4.1生产者-消费者问题

生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 

4.1.1单类生产者-单类消费者问题

问题描述:一组生产者进程和一组消费者进程共享一个初始为空、大小为n的缓冲区,只有缓冲区没满的时候生产者才能把消息放入缓冲区,只有当缓冲区不为空时消费者才能从中取出消息。缓冲区是临界资源,不能同时访问。

 问题分析

关系分析同步关系:缓冲区有空位→生产者生产。缓冲区有信息→消费者消费。互斥关系:生产者不能同时生产,消费者不能同时消费,生产者和消费者不能同时访问。

写出进程:由于单类生产者和单类消费者使用的是同样的进程,我们有两个进程:

 信号值设置:信号量mutex作为互斥信号量,初始为1;用full表示缓冲区满了的资源的数量,初始为0;用empty表示缓冲区空位资源的数量,初始为n。

  • 可以看到我们让临界区尽可能短,而将生成一个产品和使用产品放在临界区外。
  • 实现互斥的P操作一定要在实现同步的P操作后面,否则会发生死锁。这点跟前面软件实现互斥的方法之双标志先检查法在进入区先判断标志后设置标志会发生死锁一致。
  • 两个V操作可以互换。

4.1.2多类生产者-多类消费者问题

问题描述 

 问题分析

关系分析同步关系:爷爷生成→女儿消费;奶奶生成→儿子消费。盘子空(孩子们取)→爷爷或奶奶写。互斥关系:只有一个盘子,所以人都不能同时访问。

写出进程:很明显这是4个不同的进程。

信号量设置:互斥信号量设为mutex初始为1,爷爷生成的是apple,奶奶生成的是origin初始都为0。

  • 可以看到 “盘子空→爷爷或奶奶生产” 这个事件的同步关系其实是涉及到4个进程,但只需一种PV操作。
  • 可以看到当临界区容量为1时不需要额外设置互斥信号量。

4.1.3吸烟者问题

 问题描述

 可以看到其实是一个生成者多类消费者问题。

 问题分析

关系分析同步关系:生成者生产①号→消费者①;生成者生产②号→消费者②;生成者生产③号→消费者③;任一消费者取走信息→生产者生产互斥关系:所以人都不能同时访问临界区。

写出进程:可以看到是四个不同的进程。互斥关系由于只有一个临界区没有给出。

信号量设置

  • 可以看到设置信号量的思路不同,PV操作的顺序不同。

4.2读者-写者问题

问题描述:

 问题分析

关系分析同步性分析:文件不空→读者读。文件有空位→写者写。互斥性分析:写者不能同时写,写者写时读者不能读,读者可以同时读。

注:可以看到熟练之后其实就分为两步.. 

写出进程和信号量设置:可以看出来有两种进程,写者进程和读者进程,同步性用两个PV操作可以解决,互斥性用一个PV操作可以让所有人都不能同时访问临界区,但问题是读者可以读,所以可以设置一个count计数只让第一个读者使用PV操作进行互斥 同时由前面解决互斥问题的几种方法让我们需要警觉这个计数操作必须是原子性的

上述解决问题方法如果读者源源不断则会使写进程无法进行,下面介绍一种“读写公平法”

4.3哲学家进餐问题

问题描述 

 

问题分析

关系分析同步性分析:一个哲学家拿起左右手筷子→吃饭。互斥性分析:一个筷子没法同时被两个哲学家拿起来

写出进程和信号量设置:可以看到圆桌上每个哲学家都是访问两个临界区,所以有五个进程和五个临界区。如果我们采用一个PV操作来限制其中某一个临界区不能同时被访问。用两个临界区的PV操作来实现同步。如以下操作,会发生死锁现象。

进而我们要对哲学家进程施加一些限制条件。下面给出三种实现方案

最多允许4名哲学家同时进餐,这样可以保证至少有一个哲学家是可以拿到左右两个筷子的。

 

 要求奇数号哲学家先拿起左边的筷子,然后拿右边的。偶数号哲学家刚好相反。用这种方法可以保证如果相邻的两个奇号和偶号哲学家想吃饭,那么只会有其中一个可以拿起第一只筷子,另一个会直接阻塞,避免了占有一支后再等待另一只的情况。

仅当一名哲学家左右两部的筷子都可用时,才允许他抓起筷子。 

第三条是书上的描述,但跟算法并不符合。

更准确的说法应该是:各哲学家拿筷子这件事必须互斥地执行。这就保证了即使一个哲学家在拿到筷子拿一半时被阻塞,也不会有别的哲学家会继续尝试拿筷子。然后等目前正在吃饭的哲学家放下阻塞刚才那个哲学家的筷子后,被阻塞的哲学家就可以获得等待的筷子了。 


如果在考试中遇到了一个进程需要同时持有多个临界资源的情况,应该参考哲学家问题的思想,分析题中给出的进程之间是否会发生循环等待,是否会发生死锁。 

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

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

相关文章

【网络】tcpdump、Wireshark 案例超详细介绍

文章目录网络分层应用层找到服务器的 IP查接口、对象的耗时删除指定网站的Cookie表示层、会话层tcpdump、wireshard传输层telnet: 路径可达性测试nc: 路径可达性测试netstat:查看当前连接状态iftop:查看当前连接的传输速率netstat -s: 查看丢包和乱序的统…

数据结构(5)树形结构——二叉搜索树(JAVA代码实现)

5.1.概述 二叉搜索树,也叫二叉查找树、二叉排序树,顾名思义,这种二叉树是专门用来进行数据查找的二叉树。二叉搜索树的查找其实就是二分查找。 二叉搜索树的定义: 二叉搜索树可以为空如果二叉搜索树不为空,那么每个…

Visual C++ 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决

Visual C 2010开发的程序在其它电脑上运行提示“找不到MSVCR100D.dll”原因及解决 Microsoft Visual C(简称Visual C、MSVC、VS或VC)2010是微软公司的免费C开发工具,具有集成开发环境,可提供编辑C语言,C以及C/CLI等编程…

Java项目:JSP手机商城管理系统包含前台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台; 管理员角色…

大数据_什么是数据中台?

目录 一、数据中台的定义 二、数据中台必备的是个核心能力 三、数据中台VS业务中台 四、数据中台VS数据仓库 五、数据中台VS现有信息架构 六、数据中台的业务价值与技术价值 一、数据中台的定义 数据中台是一套可持续“让企业的数据用起来”的机制,是一种战略…

[附源码]计算机毕业设计JAVA人力资源管理系统论文2022

[附源码]计算机毕业设计JAVA人力资源管理系统论文2022 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM…

第8章 综合案例—构建DVD租赁商店数据仓库

目录 章节概要 案例背景介绍 数据仓库的架构模型 数据仓库的架构模型 数据库sakila的下载和安装 数据库sakila简介 数据库sakila中 数据表之间的关系 数据表简介 用于储存电影基本信息及相关介绍的数据,该数据表各个字段的含义如表。 用于储存定义电影id所…

Kafka生产者之分区

一、分区好处 (1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果; (2&…

惊喜:2023前瞻版Java面试指南,不止八股文

前言: 2022年马上就要过去了,即将要到来的就是2023年的金三银四面试季,随着政策的放宽,经济的逐步复苏,岗位的需求也会越来越大,所以趁这段时间进行知识储备将会是最好的时间段,永远要做快人一…

智能疾病查询接口

一、接口介绍 最全的疾病大全,收集了数万种常见疾病,任何常见疾病都可查询。 二、功能体验 三、API文档 3.1 查询疾病科目 3.1.1接入点说明 查询疾病的类别。 3.1.2接口地址 http[s]😕/www.idmayi.com/546-1?idmayi_appid替换自己的值&…

APP逆向案例之(二)对加固APP进行分析和破解

说明:对加固APP进行分析和破解,对发现新版本提示关掉 1、先对APP窗口类行进HOOK,确定窗口提示用的是那个类。 android hooking watch class android.app.AlertDialog 2、发现一个非常明显的函数 setCancelable objection -g com.hello.qq…

【ML特征工程】第 4 章 :特征缩放的影响:从词袋到 Tf-Idf

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

工作中常用的设计模式--策略模式

一般做业务开发,不太容易有大量使用设计模式的场景。这里总结一下在业务开发中使用较为频繁的设计模式。当然语言为Java,基于Spring框架。 1 策略模式(Strategy Pattern) 一个类的行为或方法,在运行时可以根据条件的不同,有不同的…

(C语言)printf打印的字符串太长了,我想分两行!

本文来自于公众号&#xff1a;C语言编程技术分享 一、提问 有下述C程序&#xff1a; #include <stdio.h> #include <stdlib.h>int main() { printf("123456789012345678901234567890\n");system("pause");return 0; } printf函数要打印的字…

B. Elimination of a Ring Pinely Round 1 (Div. 1 + Div. 2)

传送门 题目意思&#xff1a; 给你一个为环的序列n&#xff0c;这个序列有一个特殊的地方&#xff1a;就是如果有相邻元素相等他就会立马删除其中一个元素&#xff08;第一个和最后一个相邻&#xff09;。 然后你每次可以删除一个元素&#xff0c;问你能删除的最多的操作数是多…

想做副业没有方向,这三条告诉你什么是副业思维

怎样副业赚钱&#xff1f;教你几招&#xff0c;掌控自己的固有思维 你了解钱是怎么来的吗&#xff1f;你如果弄不懂这一点&#xff0c;你也是很难赚到钱的。 钱不是苦的&#xff0c;辛苦努力挣的基本都是一点钱。 假如将你的工作时长换为钱&#xff0c;你可以清晰地赚多少钱…

【情感识别】BP神经网络语音情感识别【含Matlab源码 349期】

⛄一、BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要。语音是语言的载体, 是人与人之间交流的重要媒介。相较于其它交流方式而言, 语音交流更加直接、便捷。近年来, 随着人机交互研究的不断深入, 语音情感识别更成为了学术界研究的热点, 其涉及…

计算机键盘用途及快捷键

用途&#xff1a; 电脑键盘上有那么多按键&#xff0c;到底都有什么作用呢&#xff1f; 几个重要的按键&#xff0c;一起来了解一下吧。 最上面一排&#xff1a; F1帮助 F2改名 F3搜索 F4地址 F5刷新 F6切换 F10菜单 1、键盘中间区域的所有输入按键。 一共是26个英文字母…

【微服务】springboot + dubbo 整合Sentinel限流

一、前言 限流对一个生产环境的系统来说&#xff0c;具有重要的意义&#xff0c;限流的目的是为了保护系统中的某些核心业务资源不被瞬间的大并发流量冲垮而采取的一种措施&#xff0c;因此一个成熟的架构设计方案&#xff0c;限流也需要纳入到架构设计和规划中。 二、常用的限…

【Linux系统】第二篇、权限管理篇

文章目录一、Linux下的用户二、文件的权限1. 文件访问者的分类2. 文件类型和访问权限3. 文件权限值的表示方法三、文件访问权限的相关设置方法1. chmod2. chown3. chgrp4. umask&#xff08;重点&#xff09;四、file指令五、目录的权限粘滞位一、Linux下的用户 这里我们在上一…