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

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

目录

引入

概念 

临界资源

临界区

干扰存在原因

互斥 

信号量 

引入

举例

概念

介绍

表示可用资源数

表示等待进程数

申请信号量

信号量的本质

全局变量?

共享内存?

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

原子性

信号量自身的安全性

原子操作的意义

操作


引入

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

概念 

临界资源

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

临界区

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

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

干扰存在原因

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

互斥 

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

 

信号量 

引入

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

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

举例

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

概念

介绍

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

表示可用资源数

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

表示等待进程数

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

申请信号量

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

 

信号量的本质

全局变量?

如果它是一个全局变量

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

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

共享内存?

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

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

信号量自身的安全性

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

 

操作

相关文章:

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

目录 引入 概念 临界资源 临界区 干扰存在原因 互斥 信号量 引入 举例 概念 介绍 表示可用资源数 表示等待进程数 申请信号量 信号量的本质 全局变量? 共享内存? 不安全问题 -- 上下文切换 原子性 信号量自身的安全性 原子操作的意义 操作 引入 通信…...

工具介绍——第三方软件远程连接(工具:Rustdesk)

文章目录 前言一、使用工具二、开始演示1、拿下目标主机权限后上传文件2、运行目标主机上的rustdesk-1.1.9.exe文件3、目标主机上whoami查看现在的用户4、查找目标主机上连接的文件,并添加连接密码5、目标主机重启rustdesk的应用程序6、本地连接主机 前言 这里主要…...

【脑机接口 算法】EEGNet: 通用神经网络应用于脑电信号

EEGNet: 神经网络应用于脑电信号 中文题目论文下载:算法程序下载:摘要1 项目介绍2 EEGNet网络原理2.1EEGNet原理架构2.2FBCCA 算法2.3自适应FBCCA算法 3EEGNet网络实现4结果 中文题目 论文下载: DOI: 算法程序下载: 地址 摘要…...

【会话技术】Cookie和Session的工作流程和区别

Cookie技术 web程序是通过HTTP协议传输的,而HTTP是无状态的,即后续如果还要使用前面已经传输的数据,就还需要重传。这样如果数据量很大的情况下,效率就会大打折扣。Cookie的出现就是为了解决这个问题。 Cookie的工作流程&#x…...

Xmake v2.8.5 发布,支持链接排序和单元测试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好&#x…...

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程控制软件总结

红队专题 招募六边形战士队员[30]远控班第一期课程与远控总结 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 [30]远控班第一期课程与远控总结 一.Bug修复(1)生成路径(2)显示系统版本号二.内存泄露(1)如何检查内存泄露 #define CRTDBG_…...

MyBatis与SQL实用技巧 实用语法

数据库SQL技巧 数值转字符 <select id"getMaterialsList" resultType"java.util.Map">selectmaterial_id materialId,material_name materialName,unit, specification, CONVERT(unit_price,CHAR) unitPricefrom trace_agriculture_materialwhere …...

更好的理解c++中的虚函数和静态多态以及动态多态

1.虚函数&#xff08;Virtual Function&#xff09; 在c 中&#xff0c; 虚函数是定义在基类中的函数&#xff0c;但是它可以在派生类中进行重写&#xff08;Override) 。 通过在基类中通过virtual 关键字声明函数 &#xff0c; 你创建了一个可以在任何派生类中特别实现的接口…...

MybatisPlus之新增操作并返回主键ID

在应用mybatisplus持久层框架的项目中&#xff0c;经常遇到执行新增操作后需要获取主键ID的场景&#xff0c;下面将分析及测试过程记录分享出来。 1、MybatisPlus新增方法 持久层新增方法源码如下&#xff1a; public interface BaseMapper<T> extends Mapper<T> …...

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。这是一个科研互助群&#xff0c;主要围绕机器人&#xff0c;无人驾驶&#xff0c;无人机方面的感知定位&#xff0c;决策规划&#xff0c;以及论文发表经验&#xff0c;以方便大家很好很快的科研…...

C复习-结构struct+bit field+union

参考&#xff1a; 里科《C和指针》 结构的声明 struct {int a;char b; } x; struct {int a;char b; } y[20], *z;// 会报错&#xff0c;因为z和x虽然都没有名字&#xff0c;但是并不是一个东西 z &x;struct SIMPLE {int a;char b; }; // 这样就对了&#xff0c;因为名字匹…...

1 快速了解Paimon数据湖核心原理及架构

1.1 什么是Apache Paimon Apache Paimon的前身属于Flink的子项目&#xff1a;Flink Table Store。 目前业内主流的数据湖存储项目都是面向批处理场景设计的&#xff0c;在数据更新处理时效上无法满足流式数据湖的需求&#xff0c;因此Flink社区在2022年的时候内部孵化了 …...

chrome v3开发插件实现所有网站允许跨域

场景&#xff1a; chrome 插件 升级到v3后&#xff0c;原来修改请求响应都变成异步&#xff0c;即无法同步拦截来修改请求响应。 在v3中也不支持修改请求响应内容。 问题&#xff1a;如何在chrome v3中允许其他网站跨域呢。 方式一&#xff1a;禁用chrome跨域&#xff0c;禁…...

unity Holoens2开发,使用Vuforia识别实体或图片 触发交互

建议&#xff1a;先看官方文档 我使用的utniy 版本&#xff1a;Unity 2021.3.6f1 官方建议&#xff1a;混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn 配置了正确工具的 Windows 10 或 11 电脑Windows 10 SDK 10.0.18362.0 或更高版本安装了 U…...

从零开始搭建微服务(一)

构建项目父工程 添加公共核心模块 安装nacos 安装nacos nacos 文档地址&#xff1a; https://nacos.io/zh-cn/docs/what-is-nacos.html 本文使用版本2.2.2 下载地址&#xff1a;https://github.com/alibaba/nacos/archive/refs/tags/2.2.2.zip 使用nacos 我们下载是源代码 解…...

一种可以实现安全便捷文件摆渡的跨网文件安全交换软件

为了保护数据的安全性和完整性&#xff0c;很多企业都采用了内外网物理隔离的方式&#xff0c;防止核心数据泄露或被恶意篡改。然而&#xff0c;这也给企业内部或与外部合作伙伴之间的文件交换带来了很多不便和挑战。如何在保证数据安全的前提下&#xff0c;实现跨网文件的快速…...

『 MySQL数据库 』数据库基础之表的基本操作

文章目录 创建表&#x1f5e1;查看表&#x1f5e1;✒ 查看表内所有信息(描述\表结构等)✒ 根据条件查看表内数据✒ 查看表的具体详细信息: 修改表&#x1f5e1;✒ 修改表名:✒ 修改表的存储引擎、编码集(字符集和校验集):✒ 表内插入数据:insert into✒ 在表中新添一个字段(列)…...

如何提高40%的Docker构建时间

1. 背景 在产品开发中构建docker镜像,随着时间的推移,会变得越来越大,构建时间也越来越长。我的目标是构建时间不超过 5 分钟。 2. 遵循Dockerfile的最佳实践 我们首先确保Dockerfile文件遵循Docker官方的最佳实践,具体做法有: 尽量使用官方的基础镜像,Docker推荐使用…...

真正解决jellyfin硬解码转码

前段时间入手一个DS423集成显卡UHD600&#xff0c;搭了一个jellyfin&#xff0c;发现网上关于硬解码的教程基本都存在问题&#xff0c;没有真正解决我的硬解码问题。经过一系列分析修改&#xff0c;最终实现硬解码。先贴效果图&#xff1a; 下载安装jellyfin这里就不叙述&#…...

声音训练数据集哪里找?中文、英文

一般找数据集的都是需要训练底膜的&#xff0c;大家git上找的开源项目大多是预训练模型。预训练就是别人已经训练好的底膜&#xff0c;你在他的基础上进行调整。而我们训练如果他这个模型不理想是需要训练底膜的。 找的方式是从git开源上找 中文 推荐MockingBird&#xff0c;…...

CNCAP2021主动安全升级全解析:AEB新增夜间场景,LKA/BSD怎么测?一份给工程师的避坑指南

CNCAP2021主动安全升级实战指南&#xff1a;从标准解读到工程落地的关键突破 当2022年第一缕阳光照进汽车实验室时&#xff0c;所有ADAS工程师的电脑屏幕上都闪烁着同一个关键词——CNCAP2021。这份被称为"史上最严"的主动安全评价体系&#xff0c;不仅将测试权重从…...

Real Anime Z开源镜像实操:纯本地运行无网络依赖的二次元生成工具

Real Anime Z开源镜像实操&#xff1a;纯本地运行无网络依赖的二次元生成工具 1. 工具介绍 Real Anime Z是一款基于阿里云通义Z-Image底座模型开发的高精度二次元图像生成工具。它通过Real Anime Z专属微调权重优化&#xff0c;专门针对真实系二次元风格进行了深度调优。 这…...

论文阅读:ICLR 2026 AlphaSteer: Learning Refusal Steering with Principled Null-Space Constraint

总目录 大模型安全研究论文整理 2026年版&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/159047894 https://openreview.net/forum?id1vvbzAqdTe ![ ICLR 2026 | 零空间安全操控 &#x1f4c4; 论文背景与基本信息 《AlphaSteer: Learning Refusal Steering…...

品牌升级后卖不动,先别怪设计公司

品牌升级了&#xff0c;为什么销量没变化&#xff1f;很多企业做品牌升级&#xff0c;心里其实都憋着一口气。老板觉得产品不差&#xff0c;工厂不差&#xff0c;渠道也不是完全没有基础&#xff0c;就是品牌看起来有点旧&#xff0c;包装有点老&#xff0c;表达有点土&#xf…...

虚拟线程CPU爆表却吞吐不升?深度解析Java 25 Project Loom调度器v2.3内核变更,定位3类隐蔽资源饥饿场景

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;虚拟线程CPU爆表却吞吐不升&#xff1f;深度解析Java 25 Project Loom调度器v2.3内核变更&#xff0c;定位3类隐蔽资源饥饿场景 Java 25 中 Project Loom 调度器 v2.3 引入了关键的“协作式调度增强”机…...

php怎么调用字节跳动AI商品推荐_php如何基于用户行为生成千人千面

抖音电商推荐接口需用PHP调用&#xff0c;先在开放平台创建应用获取client_key/client_secret&#xff0c;通过HMAC-SHA256对排序后query参数签名&#xff0c;携带access_token&#xff08;Redis缓存续期&#xff09;&#xff0c;传合规行为数据调用/item/recommend。怎么用 PH…...

Keil5编译报错找不到ARM编译器?手把手教你安装AC5.06(附路径配置避坑指南)

Keil5编译报错找不到ARM编译器&#xff1f;手把手教你安装AC5.06&#xff08;附路径配置避坑指南&#xff09; 当你满怀期待地打开一个STM32项目准备大展身手时&#xff0c;Keil5突然弹出一个令人窒息的报错&#xff1a;"Target uses ARM-Compiler Default Compiler Versi…...

PyTorch 2.8镜像保姆级教程:从GPU验证到模型加载的完整步骤详解

PyTorch 2.8镜像保姆级教程&#xff1a;从GPU验证到模型加载的完整步骤详解 1. 镜像环境概述 PyTorch 2.8深度学习镜像是一个专为RTX 4090D 24GB显卡优化的高性能计算环境。这个镜像已经预装了所有必要的深度学习工具链&#xff0c;让你可以立即开始模型训练和推理工作。 这…...

保姆级教程:用OpenCV和Python实现IPM鸟瞰图转换(附完整代码与参数详解)

实战指南&#xff1a;OpenCVPython打造高精度鸟瞰图转换系统 在自动驾驶感知系统开发中&#xff0c;鸟瞰图(Birds Eye View)转换是环境感知的基础环节。想象一下&#xff0c;当我们需要从车载摄像头拍摄的2D图像中识别车道线、检测停车位或跟踪周围车辆时&#xff0c;直接处理原…...

5G神经接收器:实时AI驱动的无线通信革新

1. 从传统信号处理到神经接收器的演进之路5G无线通信系统对实时性的要求近乎苛刻——基站必须在微秒级时间内从充满噪声的无线信道中准确还原出发送端的信息。这种严苛需求催生了LDPC码等经典算法的复兴&#xff0c;也揭示了通信算法发展的核心规律&#xff1a;性能再优越的理论…...