31 信号量

概念

共享内存在通信的过程中,没有任何保护机制。当A进程写入了一部分,就被B、拿走了,导致双方发和收的数据不完整,数据不一致问题

1.A和B看到同一份资源,共享资源,如果不加保护,会导致数据不一致问题
2.加锁–互斥访问,任何时刻,只允许一个执行流访问共享资源叫互斥,如ITM机,只允许一个人操作,结束后另一个人才可以操作
3.共享的,任何时刻只允许一个执行流访问代码的资源,叫临界资源,一般是内存空间
4.很多代码中只有几行代码访问临界资源,访问临界资源的代码叫临界区

在一个多进程或多线程并发打印的情况,显示器上的消息可能是1.错乱的 2.混乱的 3.和命令行混在一起,这种情况就是正常现象

原理

信号量类似一个计数器,描述临界资源中资源数量的多少
一个例子,电影院买票,将100个座位看做100个资源,买票的本质就是对资源的预定,电影播放时这个座位就属于自己。有一个票数的计数器等于100,每卖出一张票,计数器–,当计数器到0时,就不能再卖了,就是资源已经申请完

关于临界资源害怕的问题:
1.多个执行流访问同一个资源
2.共有n个资源,但有n+个执行流

第一种情况的解决方法是代码的逻辑问题。如果有多个执行流,可以将临界资源分为几块,让每个执行流访问其中的一块区域。第二个解决办法就是可以给这些资源引入一个计数器,数量表示当前有多少个资源,当申请一个资源时计数器–,如果为0的时候,表示没有资源了,再申请的时候就不给了,就不会出现执行流比资源数量多的情况

在这里插入图片描述
总结
1.申请计数器成功,就表示具有访问资源的权限了
2.申请了计数器,当前没有访问资源,只是对资源的预定机制
3.计数器可以有效保证进入共享资源的执行流的数量
4.所以每一个执行流,想访问共享资源的一部分的时候,不是直接访问,而是先申请计数器资源

将这个计数器称为信号量

如果电影院只有一个座位,就只需要一个值为1的计数器,只有一个人能抢到,一个人能看电影,就是只有一个执行流可以访问临界资源,申请了计数器就变为0。把这种值为1和0的计数器叫做二元信号量,本质就是一个锁

计数器为1的本质就是临界资源当成一个整体,整体申请,整体释放

保证计数器安全

计数器也是共享资源吗?计数器保护临界资源有效,得先保证自己安全。对计数器的操作是–,这个操作不是安全的

–操作在汇编中有三条语句以上
1.cnt变量的内容,拷贝到cpu寄存器
2.cpu内进行–操作
3.将计算结果写回cnt变量的位置

cpu内的进程是随时切换的,就可能在执行上面某一条的时候就被切换了

PV

操作系统内部对计数器进行了封装,申请信号量,将计数器–,作为P操作
释放资源,释放信号量,对计数器++,作为V操作
申请和释放这种PV操作,让它是原子的
原子的:要么不做,要么就做完,两态的,没有“正在做”这样的概念
这样就保证了计数器的安全

信号量本质是一把计数器,PV操作,原子的,执行流申请资源,必须先申请信号量资源,得到信号量后才能访问临界资源
信号量1,0两态的,二元信号量,就是互斥功能
申请信号量的本质:对临界资源的预定机制

函数

申请信号量,可以是多个,nsems参数控制
在这里插入图片描述
释放信号量,semum填0表示只有一个信号量,用下标0。否则,需要自己设置结构体
在这里插入图片描述在这里插入图片描述

信号量为什么是通信

前面的通信都是可以互相发送消息,而信号量只是一个计数器,为什么也是通信的一种
1.通信不仅仅是通信数据,互相协同也是,信号量协助资源的安全
2.要协同,本质也是通信,信号量首先要被所有的通信进程看到

补充

mmap函数,也是共享内存的一种
在这里插入图片描述
共享内存是在内存中申请一块地址映射到虚拟内存中,通过虚拟内存访问这块资源,如果申请的内存不是从内存中,而是一个磁盘文件的地址映射。就可以直接读写文件,不需要read,write这些函数,直接对地址操作。这个就是mmap函数

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

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

相关文章

PyCharm添加外部工具

QtDesigner 可视化UI设计客户端工具 路径:File | Settings | Tools | External Tools点号,给External Tools组添加一个条目,填写如下内容 Name:QtDesignerProgram:C:\Users\用户名\AppData\Local\Programs\Python\Py…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点,可以系统地掌握理论与实践知识。 对于笔试,类似于备考驾照理论学习阶段,誉天为大家提供在线模拟测试系统,帮助大家掌握云计算笔试考点。笔试通过后,18个月内(一年半…

Docker 哲学 - docker save | load | export | import 及实践

当我们说 "归档文件包含了容器的所有文件,但不包含容器的元数据和配置",我们是指 docker export 命令导出的 tar 归档文件包含了容器的文件系统中的所有文件,包括应用程序、库、数据等。但是,这个归档文件不包含关于容器…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C,一个CPU去执行他们,有几种方式 1、一个cpu按顺序执行ABC,这就是串行…

go语言并发实战——日志收集系统(六) 编写日志收集系统客户端

上节回顾 在上一篇文章中我们介绍了编写客户端的四个步骤,分别是: 读取配置文件,寻找日志路径初始化服务根据日志路径l来收集日志将收集到的日志发送Kafka中 关于上述的内容博主画了一个思维导图(有点丑,大家勉强看看&#xff0…

燃冬之yum、vim和你

了解了很多指令和权限,搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩,也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢? 首先来举个生活中常见点的例子:比如我的手机是华为…

Tensor张量的属性dim、type、size、shape、numel的使用方法介绍

本文重点 Tensor张量有一些常用的属性,我们可以通过这些基本的属性判断张量的类型,维度,以及元素个数,本节课程我们将对tensor属性进行简单的介绍。 代码 import torch import numpy as np atorch.Tensor(2,3,4) print(a) prin…

【论文笔记 | 异步联邦】 FedBuff

1. 论文信息 Federated Learning with Buffered Asynchronous Aggregation,International Conference on Artificial Intelligence and Statistics,2022,ccfc 2. introduction 2.1.1. 背景: 同步 FL ,随训练过程中…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型,可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型: OpenCV:Open…

给字符串添加加粗标签(AC自动机+Python)

可以暴力解决,但是为了锻炼一下ac自动机的编程,我们使用ac自动机。 ac自动机主要维护两个列表,一个列表ch,ch[f][idx]表示从父节点f向idx这个方向走,走到的节点。另一个列表nex,nex[i]表示节点i回跳边的节…

01 【哈工大_操作系统】x86_64 常用寄存器大全

在学习CPU底层技术的时候,难免会接触到各式各样的寄存器。尤其是在使用汇编语言编写操作系统时,寄存器更是必不可少的。因此,这篇文章将来详细聊聊 x86_64 架构中的所有寄存器,按照从 常用->不常用 的顺序来进行介绍。 首先&a…

Spark-机器学习(4)回归学习之逻辑回归

在之前的文章中,我们来学习我们回归中的线性回归,了解了它的算法,知道了它的用法,并带来了简单案例。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请…

Syncovery for Mac v10.14.3激活版:文件备份和同步工具

Syncovery for Mac是一款高效且灵活的文件备份与同步工具,专为Mac用户设计,旨在确保数据的安全性和完整性。该软件支持多种备份和同步方式,包括本地备份、网络备份以及云备份,用户可以根据实际需求选择最合适的方案。 Syncovery f…

信息系统项目管理师0062:需求分析(5信息系统工程—5.1软件工程—5.1.2需求分析)

点击查看专栏目录 文章目录 5.1.2需求分析1.需求的层次2.需求过程3.UML4.面向对象分析记忆要点总结5.1.2需求分析 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。根据IEEE的软件工程标准词汇表,软件需求是指用户解决问题或达到目标所需的条件或能力,是…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集,是目标检测yolo格式的,有火焰、烟雾两个目标。 训练方法看这里: https://qq742971636.blog.csdn.net/article/details/138097481 打包 依据不一样的需求, 详情请查看 https://docs.qq.com/sheet/DUEdqZ2l…

多元函数泰勒公式(含黑塞矩阵)

一元函数的泰勒公式: 接下来,由一元函数有关知识,我们有: 注意这里的dxn中,应把dx看作一个整体,即一个微小变量的n次方 我们接下来推导微分算子: 接下来,把一元泰勒公式转为微分形式: 对于二元…

React.js 3D开发快速入门

如果你对 3D 图形的可能性着迷,但发现从头开始创建 3D 模型的想法是不可能的 - 不用担心! Three.js 是一个强大的 JavaScript 库,它可以帮助我们轻松地将现有的 3D 模型集成到 React 应用程序中。因此,在本文中,我将深…

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种,以下是一些常见的方法: 1 使用Excel软件的内置功能: 打开Excel文件,点击“文件”菜单。选择“另存为”,在“保存类型”中选择“PDF”。设置保存路径和文件名,点…

【机器学习】重塑汽车设计与制造:实例与代码探索

机器学习重塑汽车设计与制造 一、机器学习在汽车设计中的应用二、机器学习在智能制造与生产中的应用 在数字化浪潮的推动下,机器学习技术正逐步成为汽车行业的创新引擎。从概念设计到智能制造,机器学习正以其独特的优势助力汽车产业的革新与发展。本文将…

数据挖掘实验(Apriori,fpgrowth)

Apriori:这里做了个小优化,比如abcde和adcef自连接出的新项集abcdef,可以用abcde的位置和f的位置取交集,这样第n项集的计算可以用n-1项集的信息和数字本身的位置信息计算出来,只需要保存第n-1项集的位置信息就可以提速…