进程同步与进程互斥-第二十四天

目录

前言

什么是进程同步

什么是进程互斥

四大区

遵循原则

本节思维导图


前言

        进程具有异步性,异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进,因此为了让进程以我们想要的顺序执行,操作系统引入了“进程同步机制”

什么是进程同步

        在管道通信(进程通信)中读进程和写进程并发地运行,由于并发必然导致异步性,即“写数据”和“读数据”两个进程地先后顺序是不确定地。而实际应用中,又必须按照“写数据->读数据”的顺序来执行,如何解决这种异步问题,就是“进程同步”所讨论的内容

        同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系,进程间的直接制约关系就是源于它们之间的相互合作

什么是进程互斥

        进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免地需要共享一些系统资源(比如内存,打印机、摄像头这样地I/O设备)

        我们把一个时间段内只允许一个进程使用地资源称为临界资源。物理设备(比如摄像头、打印机)变量、数据、内存缓冲区等都属于临界资源,并且对临界资源的访问,必须互斥地进行。

        互斥亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源必须等待当前访问临界资源的进程访问结束,释放该资源后,另一个进程才能访问临界资源

四大区

对临界资源的互斥访问,可以在逻辑上分为如下四个部分:

do
{entry section;     //进入区critical section;  //临界区exit section;      //退出区remainder section; //剩余区
}while(true)

进入区:负责检查是否可以进入临界区,若可进入,则应设置正在访问临界资源的表示(可以理解为“上锁”),以阻止其它进程同时进入临界区

临界区:访问临界资源的那段代码

退出区:负责解除正在访问临界资源的标志(可以理解为“解锁”)

剩余区:做其它处理

注意事项:临界区是进程中访问临界资源的代码段,进入区和退出区是负责实现互斥的代码段,临界区也可称为“临界段” 

遵循原则

为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵顼以下原则:

1、空闲让进,临界区空闲时,可以允许一个请求进入临界区的进程直接进入临界区:

2、忙则等待,当已有进程进入临界区时,其它试图进入临界区的进程必须等待

3、有限等待,对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)

4、让权等待,当进程不能进入临界区时,应立即释放处理机,防止进程忙等待

本节思维导图

~over~

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

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

相关文章

TCP/IP,UDP,DNS,NAT,DHCP,HTTP协议

1.TCP/IP协议 TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传…

概率中的50个具有挑战性的问题[03/50]:轻率的陪审员

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒(Frederick Mosteller)的《概率论中的五十个具有挑战性的问题与解决方案》(Fifty Challenge Problems in Probability with Solutions)一书。我认为…

如何修复concrt140.dll丢失问题,分享4种有效的方法

在计算机使用的过程中,我们经常会遇到一些错误提示或者系统崩溃的情况。其中之一就是“concrt140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些措施来修复丢失的concrt140.dll文件。本文将介绍五个解决co…

C++ 强制类型转换static_cast<typeName>

C允许通过强制类型转换机制显式地进行类型转换。强制类型转换的格式有两种。 如: 为将存储在变量nData中的int值转换为long类型,可以使用下面的表达式中的一种: (long)nData …

对数函数求导

方法 一般形 复合型 复杂复合型

【编译原理--复习】

知识点整理 第一章 同时伴有表格管理、出错处理 1、词法分析 任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等)符号 输入:源程序 输出:单词符号序列 2、语法分析 任务:根据语言的语法规则对单词符号…

VTK数据结构

只有几何结构没有拓扑结构 #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkPolyData.h> #include <vtkPolyDataWriter.h>int main(int argc, char* argv[]) {// 创建点数据vtkSmartPointer<vtkPoints> points vtkSmartPoin…

数据分析基础之《numpy(5)—合并与分割》

了解即可&#xff0c;用panads 一、作用 实现数据的切分和合并&#xff0c;将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

如何在openSUSE上进行远程登录和文件传输, ssh服务开启秘钥和密码认证

ssh服务开启秘钥和密码认证 默认情况下&#xff0c;没有开启密码认证。 解决方案&#xff1a; vim /etc/ssh/sshd_config PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes #允许密码认证RSAAuthentication yes #秘钥认证 PubkeyAuthentica…

drools入门案例

1 业务场景说明 业务场景&#xff1a;消费者在图书商城购买图书&#xff0c;下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下&#xff1a; 规则编号 规则名称 描述 1 规则一 所购图书总价在100元以下的没有优惠 2 规则二 所购图书总价在100到200元的优惠2…

在服务器上部署SpringBoot项目jar包

以下是在服务器上部署Spring Boot项目jar包的步骤&#xff1a; 打包项目&#xff1a; 使用IDEA或者命令行工具&#xff08;如Maven或Gradle&#xff09;将Spring Boot项目打包为一个可执行的jar文件。如果使用Maven&#xff0c;可以在项目的根目录下运行以下命令来打包项目&…

tampermonkey:Tampermonkey受欢迎的用户脚本管理器油猴

Tampermonkey for Mac是一款用户脚本管理器&#xff0c;主要用于在网页上运行自定义的JavaScript代码&#xff0c;以增强网站的功能和外观。它支持在各种浏览器中使用&#xff0c;包括Chrome、Firefox和Safari等主要浏览器。 以下是Tampermonkey for Mac软件的主要特点&#x…

一款C++编写的数据可视化库Matplot++

它是基于著名的 Matplotlib 库&#xff08;Python 中广泛使用的绘图库&#xff09;构建的&#xff0c;旨在提供类似于 Matplotlib 的功能&#xff0c;但专门为 C 设计。Matplot 支持多种图表类型&#xff0c;包括线图、散点图、条形图、直方图、误差线图等&#xff0c;使数据可…

RocketMQ 入门:MQ 基础概念、集群搭建与高可用配置,消息示例详解

RocketMQ 入门 视频地址&#xff1a; 千锋教育RocketMQ全套视频教程&#xff0c;快速掌握MQ消息中间件 什么是 MQ &#xff1f; Message Queue&#xff08;消息 队列&#xff09;&#xff0c;从字面上理解&#xff1a;首先它是一个队列。FIFO 先进先出的数据结构 —— 队列…

LeetCode179最大数(相关话题:自定义排序器)

题目描述 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 示例 1&#xff1a; 输入nums [10,2] 输出&…

postgresql|数据库|LVM快照热备冷恢复数据库的思考

一&#xff0c; LVM快照备份的意义 数据库备份一直是数据库运维工作中的重点&#xff0c;一个完备的备份不仅仅是仅有后悔药的功能&#xff0c;还可能有迁移数据库的作用。 那么&#xff0c;数据库备份系统我们需要的&#xff0c;也就是看重的是四个点&#xff0c;甚至更多的…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

centos 安装git

在 CentOS 上安装 Git 的过程相对简单。Git 是一个版本控制系统&#xff0c;广泛用于软件开发和其他版本控制任务。以下是在 CentOS 上安装 Git 的步骤&#xff1a; 1. 打开终端 首先&#xff0c;打开您的 CentOS 系统上的终端。 2. 安装 Git 使用以下命令安装 Git&#xf…

java的XWPFDocument3.17版本学习

maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 测试类&#xff1a; import org.apache.poi.openxml4j.exceptions.InvalidFormatExcep…

Python+Playwright自动化测试--playwright处理浏览器多窗口切换

1.简介 浏览器多窗口的切换问题相比大家不会陌生吧&#xff0c;之前小编在javaselenium系列文章中就有介绍过。大致步骤就是&#xff1a;使用selenium进行浏览器的多个窗口切换测试&#xff0c;如果我们打开了多个网页&#xff0c;进行网页切换时&#xff0c;我们需要先获取各…