临界资源,临界区,通信的干扰问题(互斥),信号量(本质,上下文切换问题,原子性,自身的安全性,操作)

目录

引入

概念 

临界资源

临界区

干扰存在原因

互斥 

信号量 

引入

举例

概念

介绍

表示可用资源数

表示等待进程数

申请信号量

信号量的本质

全局变量?

共享内存?

不安全问题 -- 上下文切换

原子性

信号量自身的安全性

原子操作的意义

操作


引入

  • 通信的本质只有一个 -- 让不同进程看到同一份资源
  • 但这样会带来一些问题,管道还好(它底层自带有访问控制)
  • 共享内存没有 -> 会出现时序问题
  • 可能在数据只写入一半的时候,另一方就读取了 -> 导致数据不一致 -> 导致处理数据发生问题

概念 

临界资源

多个进程(执行流)看到的公共的一份资源(比如管道,共享内存块)

临界区

我们为了完成通信,会写很多代码

只有真正涉及到 对临界资源的访问 的部分,才被叫做临界区

干扰存在原因

  • 干扰的问题在于 -- 数据只写入一半的时候,另一方就读取了
  • 也就是 -- 让通信的进程都可以不加保护的访问了临界资源
  • 这样会发生相互竞争,导致数据读取写入的情况不符合我们的预期
  • 而各个进程的非临界区的代码运行是互不影响的

互斥 

  • 为了防止干扰情况的出现
  • 我们让任何时刻下,只能有一个执行流访问临界区(串行使用)
  • 但是,临界资源只被一个执行流使用,效率实在太低了
  • 为了保证多进程/线程之间通信的效率,我们可以将临界资源分成多份使用,每个进程在不同的部分执行

 

信号量 

引入

为了保证 让每一个进程 访问 临界资源不同的部分,互不干扰

需要先申请信号量,而不是直接去占用

举例

  • 类似于,当你要去看电影,你得先买票
  • 买票后可以保证在这个大厅一定拥有一个你的座位
  • 且保证这个座位在特定的时间只有你来使用
  • 并且也可以保证这场大厅的进入人数不会超过座位数
  • 这样恰好可以满足互斥的需求,也提高了使用效率

概念

介绍

  • 信号量实际上是一种计数器,用来表示可用资源的数量或者进程等待的数量
  • 它可以用于控制对共享资源的访问,防止多个进程同时访问共享资源而导致的数据混乱或冲突

表示可用资源数

  • 当一个进程或线程想要访问共享资源时,它会先检查信号量的值:
  • 如果信号量的值大于0,表示有可用资源,进程可以继续执行并减少信号量的值
  • 如果信号量的值为0,表示没有可用资源,进程可能会被阻塞或等待,直到信号量的值大于0为止

表示等待进程数

  • 当一个进程发送信号通知其他进程时,它可能会增加信号量的值
  • 而等待的进程在收到信号时会减少信号量的值
  • 这样,信号量的值可以用来跟踪等待的进程数量

申请信号量

  • 让信号量计数器的值--
  • 本质上是对临界资源的一种预定(类比看电影,买了电影票相当于你预定了这个座位被你使用)
  • 释放信号量,就是让计数器++

 

信号量的本质

全局变量?

如果它是一个全局变量

  • 对于父子进程,可以互相看到这个全局变量
  • 但一旦改变,这个计数器就互相独立了

  • 对于不同进程,进程之间具有独立性,无法看到

共享内存?

如果它是一个在共享内存的变量,所有进程都能看到这个计数器

不安全问题 -- 上下文切换
  • 假设它是一个整型
  • 当我们需要对整型计算时,只有借助cpu才能完成计算,因此n--需要有三步操作(读取指令,分析+执行指令,将结果写回内存)
  • 但是,进程是随时可能会被切走的
  • 当其中一个进程在执行完第一步的时候被切走了,会带走自己的临时数据(也就是上下文)
  • 然后其他进程过来执行临界区代码,他们读取到的计数器还是原先的值,因为第一步操作还没有改变计数器
  • 如果这段过程,当前进程改变了计数器的值
  • 这时再将之前那个进程切回来,它会按原先执行的地方向后执行,然后将原先的值-1 ,写回 计数器
  • 这样就使这个计数器不是按照顺序来改变,会导致这份临界资源是不安全的
原子性
  • 因此,我们需要保证对信号量的改变是不被打断的
  • 信号量的改变结果只有两种情况,要么没变,要么改变,没有中间状态
  • (如果有中间状态,在不断的切换中,会导致上面的信号量的值不一致的问题)
  • 也就是操作要具有原子性
  • 除此之外,我们也需要不断的更新计数器的值(每个进程拥有自己的计数器副本)
  • 如果具有原子性,一旦对其操作,就一定会改变计数器,所以可以及时的拿到计数器新的状态

信号量自身的安全性

  • 上面我们假设每个进程都可以看到这个计数器,是不是就说明信号量也是临界资源呢?
  • 我们就相当于用临界资源来保护临界资源,那是不是意味着我们还需要另一种"信号量"来保护信号量?
  • 所以,为了不陷入无限循环,我们要确保信号量是安全的,不需要其他的东西来保护它不受干扰
  • 所以,对信号量的操作必须都是原子的
原子操作的意义
  • 原子操作可以确保在同一时刻只有一个进程或线程可以进行信号量的修改或访问,从而保证信号量的正确性和一致性
  • 这也就是我们引入信号量和原子操作的原因,保护临界资源,也保护他自己

 

操作

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

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

相关文章

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地(方向),直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

适合汽车音频系统的ADAU1977WBCPZ、ADAU1978WBCPZ、ADAU1979WBCPZ四通道 ADC,24-bit,音频

一、ADAU1977WBCPZ 集成诊断功能的四通道ADC,音频 24 b 192k IC,SPI 40LFCSP ADAU1977集成4个高性能模数转换器(ADC),其直接耦合输入具有10 V rms性能。该ADC采用多位Σ-Δ架构,其连续时间前端能够实现低EMI性能。它可以直接连接…

专业135总分400+西安交通大学信息与通信工程学院909/815考研经验分享

今年初试发挥不错,400,专业课135,将近一年复习一路走来,感慨很多,希望以下经历可以给后来的同学提供一些参考。 初试备考经验 公共课:三门公共课,政治,英语,数学。在备考…

GaN HEMT 电容的分析建模,包括寄生元件

标题:Analytical Modeling of Capacitances for GaN HEMTs, Including Parasitic Components 来源:IEEE TRANSACTIONS ON ELECTRON DEVICES(14年) 摘要:本文提出了一种基于表面势的终端电荷和电容模型,包…

直接插入排序与希尔排序

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🐻‍❄个人主页🎉:GOTXX🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

4.移位计算,乘除法运算

目录 一. 移位计算 (1)算数移位 (2)逻辑移位 (3)循环移位 二. 乘法运算 (1)原码的乘法运算 (2)补码的乘法运算 三. 除法运算 (1&#xf…

SpringDataJpa(二)

三、Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring D…

Python爬虫-获取汽车之家车家号

前言 本文是该专栏的第9篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly9jaGVqaWFoYW8uYXV0b2hvbWUuY29tLmNuL0F1dGhvcnMjcHZhcmVhaWQ9MjgwODEwNA== 需求:获取汽车之家车家号数据 笔者将在正文中介绍详细的思路以及采集方法,废话不多说,跟着笔者直接往…

GPT-4V:AI在教育领域的应用

OpenAI于9月25日发布了最新的GPT-4V模型,为ChatGPT引入了语音和图像功能,为用户提供更多元化的使用方式。这次更新将为用户带来更便捷、直观的交互体验,用户可以直接拍照上传并针对照片内容提出问题。OpenAI的最终目标是构建安全、有益的人工…

React 其他常用Hooks

1. useImperativeHandle 在react中父组件可以通过forwardRef将ref转发到子组件;子组件拿到父组件创建的ref,绑定到自己的某个元素; forwardRef的做法本身没有什么问题,但是我们是将子组件的DOM直接暴露给了父组件,某下…

设计模式之组合模式-创建层次化的对象结构

目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获(❀❀) 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式,它允许将对象组合成树形结…

虚幻5.1 常见的效果关闭方式

常见的虚幻效果关闭方式 1.Bloom ProjectSettings->Rendering->Default Settings->Bloom PostProcessVolume->Lens->Bloom 2.Ambient Occlusion/Screen Space Ambient Occlusion(SSAO) ProjectSettings->Rendering->Default Settings->Ambient Occl…

服务器部署 Nacos 获取不到配置浏览器可以访问

服务器部署 Nacos 获取不到配置浏览器可以访问 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳&#xff0c…

基于springboot vue mysql的在线拍卖系统 全套代码 全套文档

基于SpringBoot的在线拍卖系统,springboot vue mysql (毕业论文10168字以上,共34页,程序代码,MySQL数据库) 代码下载链接:https://pan.baidu.com/s/104LjKF7kvhYeooSBk9h65g?pwd8fk4 提取码:8fk4 【运行环境】 IDEA, JDK1.8, Mysql, Node, Vue 【技…

【每日一题】318. 最大单词长度乘积-2023.11.6

题目: 318. 最大单词长度乘积 给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。 示例 1: 输入&#xff1…

模拟ASP.NET Core MVC设计与实现

前几天有人在我的《ASP.NET Core框架揭秘》读者群跟我留言说:“我最近在看ASP.NET Core MVC的源代码,发现整个系统太复杂,涉及的东西太多,完全找不到方向,你能不能按照《200行代码,7个对象——让你了解ASP.…

第26期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

【Git】快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn? SVN是Subversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个文…

Jmeter+ant+jenkins接口自动化测试

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动…

聊聊室内导航在应用方面

大家去大型的商场时,应该都见过一些提示牌,微信扫一扫导航。当拿微信扫了之后,就会打开一个小程序,里面显示整个商场的二维或三维的平面结构,以及当前自己的位置。此时可以通过手机快速的查看商场内其他的商铺、公共区…