感性了解一下互斥和信号量

news2024/11/28 11:45:04

一、互斥的四个概念

我们把大家都能看到的资源叫做:公共资源

a、互斥:任何一个时刻,都只允许一个执行流在进行共享资源的访问——加锁

b、我们把任何一个时刻,都只允许一个执行流进行访问的共享资源叫做临界资源

c、临界资源需要通过代码访问,凡是访问临界资源的代码,叫做临界区。系统资源我们没怎么好管理,但是访问系统资源的代码我们却很好管理。

存在临界资源的原因主要是由于系统资源有限,多个进程或线程需要共享这些资源。如果同时有多个进程或线程同时访问一个临界资源,那么就会出现互斥访问问题,即可能会发生资源冲突,导致系统崩溃或产生错误。

因此,在设计多任务操作系统时,需要实现一些机制来保证对临界资源的访问是互斥的,如使用信号量、互斥量等同步机制,确保同一时间只有一个进程或线程访问临界资源,从而保证系统的稳定性和可靠性。

  1. 共享内存:多个进程或线程需要同时访问的内存区域。

  2. 文件系统:多个进程或线程需要同时读写的文件。

  3. 数据库:多个进程或线程需要共享的数据库。

  4. 硬件设备:多个进程或线程需要共享的硬件资源,如打印机、网络接口卡等。

  5. 信号量:用于控制多个进程或线程并发访问的系统资源,如缓冲区、管道等。

  6. 锁:用于控制对临界区的访问,防止并发访问造成数据不一致、竞态条件等问题。

d、原子性:只有两种状态的属性,比如:要么不做,要么做完!

二、认识信号量

举一个例子:就像我们去一个比较热门的返点吃饭一样,这家饭店里一般都是满客的状态,如果你想一去就有点吃的话,就需要预约一张桌子,然后在那天那顿饭那张桌子只有你才能落座。其他人想吃的话就只能等你离开。

在这个例子中,预约这个操作对于返点的作用是什么:

1、防止餐桌与客人数量的不匹配。

2、避免同一张桌子同时被两个客人争夺。

如果我定的是VIP包厢,只有一一张桌子,这就形成了上文说的互斥这种情况。

我们要说的信号量其实就是,一家店老板手上的一个小本本,上面时刻记录了这家店还剩下多少张桌子没有被预约出去。

也就是说,信号量本质上就是一个计数器:int count=??

客人就是不同的执行流,餐桌就是临界区中的一个个临界资源。

比如count 初始为8,每次来一个执行流count就会-- ——————p操作

如果申请失败了:

if(count>0)
    count--;
else 
    挂起阻塞

每次一个执行流结束访问就会让count++————————————v操作

所有的进程都能看到信号量,所以它是共享资源,所以信号量的原子性对于临界区来说非常重要,同一个时刻信号量只能有一个值,不允许阻塞,要么++要么--,不能有任何的中间状态。

 

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

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

相关文章

【TA100】图形 2.4 传统经验光照模型详解

一、光照模型 ● 一种模拟自然光照过程的计算机模型 ● 本次课程可以这样理解:光线与物体表面的作用 ● 分类 ○ 基于物理的光照模型(PBR)(有可依据的公式) ○ 经验模型(进行了一些近似、模拟,…

【小呆的概率论学习笔记】正态分布的代数运算

文章目录 1. 正态分布简介1. 正态分布的数字特征2. 正态分布的代数运算a. 单随机变量的代数运算b. 两个正态分布随机变量的和c. 多个正态分布随机变量的线性组合 1. 正态分布简介 正态分布应该是概率论和数理统计中最重要的一类概率分布,最早的完整论述是由数学王子…

自用-华东师范大学硕士学位论文LATEX模板

文章目录 前言部分页面效果预览使用说明:毕业论文LaTeX模板1. 安装LaTeX发行版和TeX Studio:2. 下载毕业论文模板:3. 编辑论文内容:**标题和作者信息:****摘要和关键词:****章节内容:****图片插…

【Linux】-关于调试器gdb的介绍和使用

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…

配置SSH免密登陆

配置SSH免密登陆 1.生成公私密钥对1)检查是否已存在公私钥对2)生成公私钥对 2.上传公钥到服务器3.ssh-add(mac的坑点)4.使用配置文件连接 博主是MAC用户,文章参考知乎 1.生成公私密钥对 1)检查是否已存在…

Redis高性能设计之epoll和IO多路复用深度解析

一 多路复用 并发多客户端连接, 在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模型的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下: //直接调用recv函数…

【Java】JAVASE面向对象知识点总结

面向对象 概念 现实生活: ​ 类:抽象的概念,把具有相同特征和操作的事物归为一类 ​ 先有实体,再有类的概念 代码世界: ​ 类:抽象的概念,把具有相同属性和方法的对象归为一类 ​ 编写顺序&…

epoll的LT与ET模式以及阻塞和非阻塞

文章目录 1、基本概念2、关于在socket和EPOLL中的阻塞与非阻塞3、几种IO模型的触发方式4、代码验证5、总结 1、基本概念 Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次…

Flask-蓝图

1、使用步骤&#xff1a; 创建蓝图 blue Blueprint("myblue01", __name__) 使用蓝图装饰视图函数 blue.route(/) def index():return index 将蓝图注册到app中 from appdemo_blueprint import blue app.register_blueprint(blue) 2、以包的形式使用蓝图 <…

Java007——Java注释学习

围绕以下3点介绍&#xff1a; 1、什么是Java注释&#xff1f; 2、Java注释的作用&#xff1f; 3、Java注释长什么样&#xff0c;以及怎么使用Java注释&#xff1f; 一、什么是Java注释&#xff1f; Java注释是在Java程序中用来描述代码的特殊语句。 注释被忽略并且不被编译器…

PyTorch 深度学习 || 专题六:PyTorch 数据的准备

PyTorch 数据的准备 1. 生成数据的准备工作 import torch import torch.utils.data as Data#准备建模数据 x torch.unsqueeze(torch.linspace(-1, 1, 500), dim1) # 生成列向量 y x.pow(3) # yx^3#设置超参数 batch_size 15 # 分块大小 torch.manual_seed(10) # 设置种子点…

javascript基础三十:JavaScript如何实现上拉加载,下拉刷新?

一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页&#xff0c;只是交互形式不同 开源社区也有很多优秀的解决方案&#xff0c;如iscroll、better-scroll、pulltorefresh.js库等等 这些第三方库使用起来非常便捷 我们通过原生的方…

哈工大 大数据 数据库实验(3) 物理数据库设计--索引结构

指导书: HIT邹老师数据库实验三资源-CSDN文库 导入数据库 操作 两个元组的分布规律 1.查询元组的数据分布 SELECT COUNT(*) FROM Foo; SELECT COUNT(*) FROM Foo WHERE id 0; SELECT COUNT(*) FROM Foo WHERE a 0; SELECT COUNT(*) FROM Foo WHERE b 0; SELECT COUNT(*…

c++ 解析html与htmlcxx库

目录 1&#xff0c;htmlcxx Github 版本源码下载 2&#xff0c;htmlcxx Linux 版本源码下载 3&#xff0c;htmlcxx 解析例子 1&#xff0c;htmlcxx Github 版本源码下载 正如在前一篇文章 c CFile 类 里提到的&#xff0c;我想要从指定的 html 文件里提取…

【裸机开发】镜像文件内部信息构成

由于当前使用的是裸板&#xff0c;没有OS&#xff0c;DDR的初始化、文件保存地址都尚未确定&#xff0c;所以我们生成二进制文件以后&#xff0c;是无法直接放到开发板上运行的。 因此&#xff0c;我们一般会在二进制文件之前加一些头部信息&#xff0c;这些头部信息会告诉开发…

xsync集群分发脚本

脚本&#xff1a; #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi #2. 遍历集群所有机器 for host in hadoop02 hadoop03 doecho $host #3. 遍历所有目录&#xff0c;挨个发送for file in $do#4. 判断文件是否存在if [ -e $file ]th…

文本三剑客awk:命令讲解

awk-命令讲解&#xff1a; 一、awk&#xff1a; 1.定义&#xff1a; &#xff08;1&#xff09;在 Linux/UNIX 系统中&#xff0c;awk 是一个功能强大的编辑工具&#xff0c;逐行读取输入文本&#xff0c;默认以空格或tab键作为分隔符作为分隔。并按模式或者条件执行编辑命令…

006-从零搭建微服务-注册中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 核心依赖 需要注册配置中心的服务引入下面 …

步进电机基本原理及驱动方式详解

步进电机基本原理及驱动方式详解 步进电机相关概念基本原理类型和结构转子结构定子结构 励磁方式ATD9800 驱动使用实例 参考文献 步进电机相关概念 步进电机是一种常用于控制和定位应用的电动机&#xff0c;其独特的工作方式使其在许多领域中都具有广泛的应用。步进电机以其 精…

正态总体下常见的抽样分布

1.正态总体下常见的抽样分布 本人博客&#xff1a;总体分布、样本分布、抽样分布的区别 本人博客&#xff1a;三大抽样分布 正态总体下常见的抽样分布意思是&#xff1a;样本来自服从正态分布的总体中&#xff0c;从样本中抽样后得到的分布 1.1 单个正态总体下的抽样分布&…