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

进程同步与互斥

目录

进程同步与互斥(1)

第一节、进程间相互作用

一、相关进程和无关进程

二、与时间有关的错误

第二节、进程同步与互斥

一、进程的同步

二、进程的互斥

三、临界区

进程同步与互斥(2)

三、信号量与P、V操作的物理含义

四、用P、V操作实现进程间的互斥

五、用P、V操作实现进程间的同步

 六、信号量及P、V操作总结 

进程同步与互斥(3)

第四节 经典的进程同步问题

一、简单生产者--消费者问题

二、多个生产者--消费者问题 

三、读者--写者问题 

进程同步与互斥(4)

四、同步与互斥的综合应用

第五节管程 

一、管程的提出

第六节 进程通讯

一、共享内存

二、消息机制

三、管道通信


进程同步与互斥(1)

第一节、进程间相互作用

一、相关进程和无关进程

1.相关进程:在逻辑上具有某种联系的进程
2.无关进程:在逻辑上没有关联的进程
3.举例:(1)为两个不同源程序进行编译的进程,它们可以并发执行,但它们之间无关
(2)三个进程,分别是读数据进程、处理数据进程、打印结果进程,它们相互依赖、相互合作,是一组相关进程。

二、与时间有关的错误

对于相关进程来说,可能有若干并发进程同时使用共享资源,即一个进程一次使用未结束,另一进程也开始使用,形成交替使用共享资源。
结果:形成与时间有关的错误

第二节、进程同步与互斥

一、进程的同步

进程的同步:是指进程之间一种直接的协同工作关系,一些进程相互合作共同完成一项任务。(一个进程执行完任务,另一个进程才能执行)
例如:进程A从硬盘上读记录,每读出一个记录就存入缓冲区,进程B从缓冲区中取出记录加工,直至所有记录处理结束。
直接制约关系:A若没有把记录读入缓冲区,B等待;反之,B若从缓冲区取出记录,A等待;

二、进程的互斥

在系统中,许多进程常常需要共享资源,而这些共享资源往往需要排他性的使用,即一次只能为一个进程服务,因此,各进程间只能互斥使用这些资源,进程间的这种关系就是进程的互斥。
例如:多个进程竞争使用打印机、一些变量、表格等资源,进程间的互斥是一种间接制约关系。(同步是直接制约关系)

三、临界区

1.临界资源:若在系统中的某些资源一次只允许一个进程使用,则这类资源称为临界资源或共享变量。
2.临界区:访问临界资源的那段代码
3.相关临界区:如果有若干进程共享某一临界资源,则该临界区称为相关临界区
4.相关临界区的调度使用原则:当临界资源空闲时,若有一个进程要求进入临界区,应允许它立即进入。---有空让进,有效利用资源。
(2)若有一个进程已在临界区,其他要求进入临界区的进程必须等待,--无空等待,互斥进入
(3)当没有进程在临界区,而同时有多个进程要求进入临界区,选择其一进入,其他等待。多种选一
(4)任一进程进入临界区的要求应在有限时间满足--有限等待,避免死等。
(5)处于等待状态的进程应放弃占用处理器。---让权等待,避免忙等。

 

进程同步与互斥(2)

三、信号量与P、V操作的物理含义

信号量S表示某类可用的资源,对于不同的资源,用不同的信号表示。
S>0时,S表示某类资源的可用数量
S<0时,其绝对值表示排在S等待队列中进程的数目。
执行一次P操作,表示请求一个资源。
执行一次V操作,表示进程释放一个资源。

四、用P、V操作实现进程间的互斥

假设有进程A、B竞争进入临界区,用P、V操作实现进程之间的互斥。
首先定义信号量S,并使之初值为1。

五、用P、V操作实现进程间的同步

解决思路:如果有两个进程同步,设置两个信号量S1,S2,初始值可以设为0。为了表达同步,同一信号量的P、V
操作分属于两个进程,如例一:


例二:有三个进程,进程get从输入设备上不断读取数据,并放入缓冲区buffer1;进程copy不断地将缓冲区buffer1中的内容复制到缓冲区buffer2;进程put则不断将buffer2中的内容在打印机上输出。
三者的制约关系:get进程必须先从设备读数据到buffer1,copy进程才能从buffer1复制内容到buffer2,最后put进程才能打印buffer2的内容。
反之,copy进程从buffer1取走数据之后,get进程才能继续从设备读数据到buffer1,put进程从buffer2取走数据之后,copy进程才能复制buffer1的数据到buffer2。
故可以设置四个信号量来保证三者的执行顺序
信号量设置:
S1,初始值为1,保证get进程能够从设备读取数据到buffer1。
S2,初始值为0,copy进程能否将buffer1数据复制到buffer2。
S3,初始值为1,put进程能否将buffer2内容打印输出。
S4,初始值为0,保证buffer2缓冲区内容可用

 六、信号量及P、V操作总结 

1.P、V操作必须成对出现
2.互斥操作时,P、V操作出现在同一进程
3.同步操作时,P、V操作出现在不同进程
4.既有同步、又有互斥操作时,同步信号量P操作在前,互斥信号量P操作在后,V操作顺序不限。

进程同步与互斥(3)

第四节 经典的进程同步问题

一、简单生产者--消费者问题

问题描述:设有一个生产者进程P,一个消费者进程Q,他们通过一个缓冲区联系起来,如图4-2所示。
1.二者关系描述:
(1)生产者生产产品放入缓冲区,消费者从缓冲区取产品,进行消费;
(2)P进程不能往已经“满”的缓冲区放产品,Q进程不能从“空”缓冲区取产品
2.信号量设置:
empty,初值为1,用于指示空缓冲区数量
full,初值为0,用于指示满缓冲区数量
3.解决方案:

二、多个生产者--消费者问题 

1.问题描述:设有若干个生产者P1、P2、……,若干个消费者Q1、Q2、……,他们通过一个环形缓冲池联系起来,如图4-3所示。


2.同步问题和信号量设置,生产者不能往“满”缓冲区中放产品,设置信号量empty,初始值为k,指示缓冲池中空缓冲区数目。
消费者不能从“空”缓冲区中取产品,设置信号量full,初始值为0,指示缓冲池中的满缓冲区数目。
3.互斥问题和信号量设置,缓冲必须互斥访问,设置信号量mutex,初始值为1。
4.其他变量设置,整型量i、j,初始值0,分别用于指示空缓冲区和满缓冲区位置。
5.算法


6.例题:桌子上有一个水果的盘子,一次只能放一个水果,父亲向盘中放苹果或橘子,女儿专吃苹果,儿子专吃橘子,试用PV操作写出他们能正确同步的过程。
(1)分析:在本题中,爸爸、女儿、儿子共用一个盘子,盘子一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入盘中的是橘子,则允许儿子吃,女儿必须等待;若放入盘中的是苹果,则允许女儿吃,儿子必须等待;
本题实际是生产者--消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只能消费其中一类固定产品。

(2)信号量设置:设置3个信号量S、So、Sa,信号量S表示盘子是否为空其初值为1;信号量So表示盘子是否有橘子,其初值为0;信号量Sa表示盘子是否有苹果,其初值为0;
(3)信号量定义:Semaphore S=1,So=0,Sa=0
(4)算法

三、读者--写者问题 

1.问题描述:假定有某个共享文件F,系统允许若干进程对文件F进行读或写。读文件的进程称为读者,写文件的进程称为写者,他们遵守如下规定:
(1)多个进程可以同时读文件F
(2)当一个进程在对文件F进行写时,不允许其他进程对文件进行读或写。
(3)当有进程正在读文件时不允许任何进程去写文件。
2.问题分析:
(1)写者与写者进程之间互斥,互斥文件F
(2)写者进程与第一个读者之间互斥访问文件。
3.变量设定:
read_count:整型量,当前正在读的读者进程个数,来一个读者数量加1,走一个读者数量减1;
mutex:互斥信号量,对read_count互斥访问
write:互斥信号量,写者与写者的互斥,写者与读者之间的互斥。
4.算法:

例题:若有一个文件F,供多进程读,现在把进程分成A、B两组,规定同组的进程可同时读文件F,但不同组的进程不能同时读文件F。试用PV操作写出该文件的同步算法。
(1)变量设置:定义两个计数器C1和C2分别记录A组和B组中正在读文件F的进程数,它们的初始值均为0。
(2)信号量设置:设置三个信号量S1、S2、SAB才能保证正确并发执行;S1用来保证A组进程对C1的互斥访问,S2用来保证B组对进程C2的互斥访问,SAB用来保证A组进程和B组进程对文件F的互斥访问,它们的初始值均为1;

进程同步与互斥(4)

四、同步与互斥的综合应用

例4-1:路口单双号交通管制
问题描述:某个城市为解决市内汽车太多、拥堵问题,出台一项措施,对进入市区的车辆实行单双号限行办法,规定单号单行,双号双行。
有一个进入市区中心的路口,进入该路口的道路有一条,离开该路口道路有两条,一条进入市区,一条进入环线,路口设有车牌识别设备和放行栅栏。如图4-4所示:
例4-1分析
可抽象为生产者--消费者问题
生产者:检查车辆牌号
消费者1:进入“市区放行栅栏”
消费者2:进入“进入环路放行栅栏”

 

第五节管程 

一、管程的提出

信号量及P、V操作的缺点:
(1)程序易读性差
(2)程序不利于修改和维护
(3)正确性难以保证
(4)为了更易于编写正确的程序,引入管程

二、管程的概念及组成

定义:是一个由过程、变量及数据结构等组成的一个集合,它们组成一个特殊的模块或软件包。进程可在任何需要的时候调用管程中的过程。
组成:管程名称、共享数据说明、对数据进行操作的一组过程、对共享数据赋初值的语句。

第六节 进程通讯

一、共享内存

1.原理:在相互通信的进程之间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程之间的信息交换。

二、消息机制

1.消息缓冲
消息缓冲通信原理:进程间的数据交换,是以格式化的消息(也称为消息报文)为单位的。程序员直接利用操作系统提供的一组通信命令(原语),实现大量数据的传递,通信过程对用户是透明的。
消息格式:
struct message_buffer{
int sender;//发送者进程标识符
int size;//消息长度
char *text;//消息正文
struct message_buffer *next;//指向下一个消息缓冲区的指针
}


2.信箱
信箱通讯原理:为了实现进程间的通信,可以设计一个通信机构-信箱,以发送信件和接收信件为进程间通信的基本方式。

三、管道通信

所谓“管道”,是指用于连接一个读进程和写进程以实现他们之间通信的一个共享文件,又名pipe文件。
最早出现在UNIX系统中,是UNIX系统进程通信的一大特色

相关文章:

进程同步与互斥

目录 进程同步与互斥&#xff08;1&#xff09; 第一节、进程间相互作用 一、相关进程和无关进程 二、与时间有关的错误 第二节、进程同步与互斥 一、进程的同步 二、进程的互斥 三、临界区 进程同步与互斥&#xff08;2&#xff09; 三、信号量与P、V操作的物理含义…...

mysql workbench常用操作

1、No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar 方法一&#xff1a;双击你要使用的库 方法二&#xff1a;USE 数据库名 2、复制表名&#xff0c;字段名 3、保存链接...

【操作】国标GB28181视频监控EasyGBS平台更新设备信息时间间隔

国标GB28181协议视频平台EasyGBS是基于GB28181协议的视频监控云服务平台&#xff0c;可支持多路设备同时接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台…...

TensorFlow入门(八、TensorBoard可视化工具的应用)

TensorBoard常用函数和类http://t.csdn.cn/Hqi9c TensorBoard可视化的过程: ①确定一个整体的图表,明确从这个图表中获取哪些数据的信息 ②确定在程序的哪些节点、以什么样的方式进行汇总数据的运算,以记录信息,比如在反向传播定义以后,使用tf.summary.scalar记录损失值的变…...

升级targetSdkVersion至33(以及迁移至Androidx)

1.设置 android.useAndroidXtrue 和 android.enableJetifiertrue 2.一键迁移至androidx&#xff1a;Refactor -> Migrate to Androidx 3.手动修改未能自动迁移到androidx的部分&#xff1a; android.support.v4.view.ViewPager.PageTransformer -> androidx.viewpager.wi…...

python3.11版本pip install ddddocr调用时报错got an unexpected keyword argument ‘det‘ 解决

一、如图出现如下问题 ddddocr.__init__() got an unexpected keyword argument det出现问题原因&#xff1a;python3.11默认安装版本就旧版的ddddocr1.0的&#xff0c;所以导致如下报错 二、解决方案一&#xff08;推荐&#xff09; python3.11的环境直接安装这个即可&…...

代理IP与Socks5代理:跨界电商之安全防护与智能数据引擎

第一部分&#xff1a;跨界电商的兴起与网络安全挑战 1.1 跨界电商的崭露头角 跨界电商已经成为全球贸易的新引擎&#xff0c;企业纷纷踏上了拓展国际市场的征程。 1.2 网络安全的不容忽视 跨界电商的增长也伴随着网络安全威胁的增加。黑客攻击、数据泄露和欺诈行为等风险呈…...

如何评估一个HR是否专业?看这些标准

HR在遇到优秀的人才时&#xff0c;以往的招聘中&#xff0c;我们总以惯性思维寻找吸引人才的突破口&#xff0c;诸如体现薪酬优厚、突出平台优势甚至提高面试话术等&#xff0c;却忽略了面试官本人的人格魅力&#xff0c;本身就是公司招聘的形象代言&#xff0c;因为优秀的面试…...

WordPress主题开发( 八)之—— 模板循环详细用法

WordPress 主题开发教程手册 — 模板循环 WordPress 主题开发中&#xff0c;模板循环是一个非常关键的概念&#xff0c;它负责默认机制来输出文章内容。模板循环会遍历当前页面获取的所有文章&#xff0c;然后使用主题中的模板标签将它们格式化并输出。 模板循环的应用 Word…...

QT : 完成绘制时钟

1.头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QTimer> #include <QTime> #include <QPaintEvent> #include <QDebug> #include <QBrush>QT_BEGIN_NAMESPACE namespace Ui { class…...

香港云服务器和日本云服务器哪个好?(详细对比)

​  购置海外服务器时&#xff0c;您是在乎网络速度?价格?稳定性?当这几个因素同时存在&#xff0c;我们该如何选择?本篇针对海外热门的两个地区&#xff0c;中国香港和日本&#xff0c;这两种云服务器谁优谁劣?各有什么亮点?逐一进行对比分析。 一、速度上来看 中国香…...

Cross Attention和 Self- Attention 的区别?

Cross Attention和Self-Attention都是深度学习中常用的注意力机制&#xff0c;用于处理序列数据&#xff0c;其中Self-Attention用于计算输入序列中每个元素之间的关系&#xff0c;Cross Attention则是计算两个不同序列中的元素之间的关系。它们的主要区别在于计算注意力分数时…...

《从零开始的Java世界》02面向对象(基础)

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…...

pve关闭windows虚拟机慢

背景&#xff1a; 在web界面关闭windows虚拟机一直转圈&#xff0c;使用命令行关闭报错 qm stop 155 trying to acquire lock... cant lock file /var/lock/qemu-server/lock-155.conf - got timeout解决 删除lock&#xff0c;然后用命令行重新关闭 rm /var/lock/qemu-serve…...

【Django】 rest_framework接口开发流程及接口功能组成

rest_framework接口开发流程及接口功能组成 使用restframework框架开发接口&#xff0c;方式应该有6、7种&#xff0c;每个人的习惯不同&#xff0c;用的方法也不一样&#xff0c;再次不再一一详述。 我比较常用&#xff1a;ModelSerializerGenericAPIView 原因是用视图函数装饰…...

Kafka Log存储解析以及索引机制

1.概述 在Kafka架构&#xff0c;不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念&#xff0c;而Partition是物理上的概念。每个Partition逻辑上对应一个log文件&#xff0c;该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该…...

广告电商模式:探索新商业模式,实现三方共赢

随着互联网技术的发展&#xff0c;电商行业正在不断探索新的商业模式。其中&#xff0c;广告电商模式是一种创新的方式&#xff0c;它成功地将广告和电商相结合&#xff0c;实现了三方共赢的局面。一、广告电商模式的定义广告电商模式&#xff0c;顾名思义&#xff0c;是一种将…...

动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具&#xff0c;主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入&#xff1a;我们改变了线程池以往的使用姿势&#xff0c;所有配置均放…...

无线通信——Mesh自组网的多跳性

Mesh的多跳性 Mesh网络具备多跳性。什么是多跳性呢&#xff1f;上面说过&#xff0c;每一个具备Mesh网络的设备都是独立的节点。因此&#xff0c;当我发出一条数据时&#xff0c;这些数据会通过跳跃到达不同的网络节点&#xff0c;数据从一个节点跳到另一个节点&#xff0c;直到…...

QA 云计算实验问题汇总

Q Win11中VMware虚拟网卡有感叹号 2023-9-27一位同学的win11的两个VMware17的虚拟网卡都有感叹号 A 清除注册表 步骤1 关闭VMWare虚拟化软件 步骤2 使用CCleaner pro 清理注册表 步骤3 重启系统 步骤4 VMware虚拟网卡上的感叹号消失。 Q Win11上的VisualBox的网卡消失了…...

VEX —— Functions|Groups

目录 expandpointgroup —— 返回点组内点号 expandprimgroup —— 返回面组内面号 expandvertexgroup —— 返回顶点组内顶点号 inpointgroup —— 判断指定点是否在点组内 inprimgroup —— 判断指定面是否在面组内 invertexgroup —— 判断指定顶点是否在顶点组内 np…...

JavaSE18——接口

接口(interface) 1 概述 在Java中&#xff0c;接口是一种抽象数据类型&#xff0c;它定义了一组方法&#xff08;没有方法体&#xff09;&#xff0c;但没有实现这些方法的具体代码。接口可以看作是一种合约&#xff0c;它规定了类应该具有的行为。类可以实现一个或多个接口&…...

杭州亚运会开幕式惊现数字人火炬手,动捕设备迸发动画制作新动能

在第十九届亚运会开幕式上&#xff0c;首次出现了“数字人”点火形式&#xff0c;打造了亚运史上首个数字点火仪式&#xff0c;这种点火方式是一种颠覆性创作的同时&#xff0c;这也是裸眼3D技术、现实增强和AI人工智能技术的完美结合。 此次数字火炬手的背后是采用了动捕设备&…...

ptmalloc源码分析 - malloc/free函数的实战篇(12)

目录 一、chunk的大小实验 二、获取使用中的chunk信息的实验 三、小内存块尝试获取fd信息的实验 四、常用malloc/free函数使用注意事项 看了前面11章节的内容&#xff0c;我们也基本了解了ptmalloc的内存管理逻辑。此处也可以通过一些手段&#xff0c;获取到chunk的信息&am…...

博弈论(奇偶考虑法)+计数+DP(判定转dp):CF838C

首先题目有博弈&#xff0c;先分析一波最优策略&#xff08;步骤&#xff1a;分析性质&#xff09;。 两个人&#xff0c;所以显然考虑奇偶考虑法递归考虑。 首先删就是使子问题-1&#xff0c;重新排列是在当前子问题里的。 一个串的排列是有限的&#xff0c;所以这里就可以…...

郁金香2021年游戏辅助技术中级班(一)

郁金香2021年游戏辅助技术中级班&#xff08;一&#xff09; 用代码读取utf8名字字节数组搜索UTF-8字符串 用CE和xdbg分析对象名字从LUA函数的角度进行分析复习怪物名字偏移 用CE和xdbg分析对象数组认识虚函数表分析对象数组 分析对象数组链表部分链表的定义链表的数据在内存里…...

加密货币交易所偿付能力的零知识证明

如何检测下一个 FTX 和 Mt. Gox 加密货币交易所 FTX 的内爆导致数十亿客户资金流失&#xff0c;这是加密货币历史上交易所破产的最新例子。历史可以追溯到 2014 年&#xff0c;当时处理 70% 比特币交易的历史最悠久、规模最大的交易所 Mt. Gox 丢失了用户的 850,000 个比特币。…...

软考网络工程师防火墙配置考点总结

&#xff08;考试重点&#xff09; 一、访问控制列表 管理网络当中的数据流量&#xff0c;实现数据过滤的重要手段。可以在路由器、三层交换、二层交换和防火墙上实现。 隐藏规则&#xff1a;当前面的规则都匹配不上&#xff0c;华为默认允许&#xff0c;思科默认拒绝。 分…...

【IDEA】idea恢复pom.xml文件显示灰色并带有删除线

通过idea打开spring boot项目后&#xff0c;发现每个服务中的pom.xml文件显示灰色并带有删除线&#xff0c;下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files&#xff0c;把pom.xml前面的复选框去掉&#xff0c;去掉之…...

Python数据分析之Excel

Openpyxl库 1、Openpyxl模块2、Excel写入2.1、新建2.2、添加数据2.3、单元格格式 3、Excel读取4、Excel的CRUD4.1、查4.2、改4.3、删 1、Openpyxl模块 Openpyxl是一个用于处理xlsx格式Excel表格文件的第三方python库&#xff0c;几乎支持Excel表格的所有操作 基本概念&#x…...