【Linux】详解进程通信中信号量的本质同步和互斥的概念临界资源和临界区的概念

news2024/10/7 20:33:14

一、同步和互斥的概念

1.1、同步

        访问资源在安全的前提下,具有一定的顺序性,就叫做同步。在多道程序系统中,由于资源有限,进程或线程之间可能产生冲突。同步机制就是为了解决这些冲突,保证进程或线程之间能够按照既定的顺序访问共享资源。同步机制有助于避免竞态条件和死锁(deadlock)等问题,确保系统的稳定性和可靠性。

1.2、互斥

        在访问一部分共享资源的时候,任何时刻只有我一个人访问,就叫做互斥。当某一进程或线程正在访问某临界区(即共享资源)时,就不允许其他进程或线程进入,这样可以避免数据冲突和不一致。互斥机制有助于保证同一时间只有一个线程或进程能够访问被保护的临界区,从而确保数据的一致性和完整性。

二、临界资源和临界区的概念

2.1、临界资源

        被保护起来的,任何时刻只允许一个执行访问的公共资源就叫做临界资源。这类资源在某一时刻只能有一个进程或线程占用,如果多个进程或线程试图同时访问临界资源,可能会引发数据冲突或不一致。物理设备如打印机、输入机等都属于临界资源。

2.2、临界区

访问临界资源的代码,我们叫做临界区。临界区的访问需要遵循一定的调度原则,如空闲让进、忙则等待等,以确保资源的正确和高效利用。所谓的保护公共资源(临界资源)的本质就是程序员保护临界区

三、认识信号量

3.1、信号量的本质

        信号量本质是一个计数器,是一个描述临界资源数量的计数器。进程要访问临界资源的时候,必须先申请信号量,申请信号量成功了才能继续往下走,否则就要进行阻塞或挂起等待。信号量的值表示了可用资源的数量或等待访问该资源的进程/线程数。当进程或线程需要访问共享资源时,会先检查信号量的值。如果信号量的值大于0,表示还有可用的资源,进程或线程可以继续执行并访问资源,同时信号量的值会减1。如果信号量的值为0,表示所有资源都已被占用,进程或线程需要等待,直到有其他进程或线程释放资源并将信号量的值增加。访问完临界资源进程要释放信号量,即信号量加1。当信号量的初始值为1时,就实现了互斥的功能

3.2、普通的整形变量无法实现信号量的效果

原因有两个:

  1. 信号量本身就是共享资源,本身就是要被多个进程或线程共同可以看到的,但是一个普通整形变量无法同时被多个进程看到,就算是父子进程,当要改变进程数据时都要发生写时拷贝,因此无法让多个进程看到同一个变量。
  2. 对整形变量做++和--操作,这个操作不是原子的。

这里又设计一个概念叫原子性。

3.3、原子性的概念

        在操作系统中,原子性是指一个操作或一系列操作是不可中断的,要么全部执行成功,要么全部不执行,中间不能被其他进程或线程干扰。换句话说,原子操作是不可分割的,具有“同生共死”的特性,即要么完全执行,要么完全不执行,没有中间状态。上面的对一个整形做++或--操作实际上是先将内存中的一个整形变量的值先拷贝到CPU的寄存器中,在寄存器中对该变量做++操作然后再将该变量拷贝会内存当中,我们也可以看到,这中间其实经历了三个过程,换句话说,++或--操作不具备原子性。原子性在并发编程中尤为重要,特别是在共享资源的读写操作中。当多个线程或进程同时访问和修改共享资源时,如果操作不是原子的,就可能导致数据不一致的问题。原子性确保了即使在多线程环境下,一个操作一旦开始就不会被其他线程干扰,从而保证了数据的一致性

3.4、信号量操作的接口

3.4.1、获取信号量

        key就类似于共享内存中使用ftok函数产生的key,nsems表示要产生几个信号量,semflg表示如何创建,与共享内存的第三个参数同理,可参考本人上一篇博客,返回值为该信号量集标识符,这是通过semget函数创建或获取信号量集时返回的IPC标识符。

3.4.2、控制/删除信号量

 

        semid表示该信号量集标识符。semnum表示信号量的编号,用于指定信号量集中的某个特定的信号量,第一个信号量的编号是0。cmd表示需要执行的命令,IPC_RMID为删除命令。

3.4.3、对信号量进行PV操作

        sops指向存储信号操作结构的数组指针。在这个数组中的每个sembuf结构体对应一个特定信号的操作。 这是sops数组中sembuf结构的数量。

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

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

相关文章

都以为他是自杀20年后遗书曝光才明白张国荣的离世不简单

在时光的长河中,有些瞬间如同流星划过天际,短暂却又璀璨夺目。二十年前的那个春天,一个灵魂从这个喧嚣世界悄然离去,留下无尽的叹息与疑问。他就是张国荣——一位被誉为“风华绝代”的巨星。许多人曾认定他的离开是一场悲剧性的自…

计算机网络 -- 多人聊天室

一 程序介绍和核心功能 这是基于 UDP 协议实现的一个网络程序,主要功能是 构建一个多人聊天室,当某个用户发送消息时,其他用户可以立即收到,形成一个群聊。 这个程序由一台服务器和n个客户端组成,服务器扮演了一个接受…

element-ui合计逻辑踩坑

element-ui合计逻辑踩坑 1.快速实现一个合计 ​ Element UI所提供的el-table中提供了方便快捷的合计逻辑实现: ​ https://element.eleme.cn/#/zh-CN/component/table ​ 此实现方法在官方文档中介绍详细,此处不多赘述。 ​ 这里需要注意&#xff0c…

Don‘t fly solo! 量化之路,AI伴飞

在投资界,巴菲特与查理.芒格的神仙友谊,是他们财富神话之外的另一段传奇。巴菲特曾这样评价芒格:他用思想的力量拓展了我的视野,让我以火箭的速度,从猩猩进化到人类。 人生何幸能得到一知己。如果没有这样的机缘&…

每日学习笔记:C++ STL算法之容器元素变序

目录 反转元素次序 reverse(beg, end) reverse_copy(srcBeg, srcEnd, destEnd) 旋转元素 旋转:rotate(beg, newBeg, end) 复制同时旋转:rotate_copy(srcBeg, srcNewBeg, srcEnd, destBeg) 对元素做排列组合情况列举与切换 next_permutation(beg, …

国产化里程碑:明道云HAP私有部署版获信创评估证书,荣登会员单位

近期,明道云HAP私有部署版荣获信创产品评估证书,这一成就不仅标志着我们在信创领域的深入布局和持续努力获得了行业的广泛认可,也是对我们积极拥抱和推动国产化技术发展的肯定。更值得一提的是,我们还被授予“成员单位”的称号&am…

基于通达信---做T专用算法

什么是做T? 股票做T是股票市场中常见的一种投资策略,也就是股票进行T+0操作,通过当天买进的股票,在当天卖出,是股市中常见的一种超短线的操作。其中T就是指交易日,利用交易日中的股票涨跌来赚取差价。股票做T常见的类型就是正T和倒T。 1、正T 股票做正t就是指先买后卖,…

Rokid AR Lite空间计算套装发布,中国空间计算踏上差异化领先之路

动动手指、动动眼睛就可以“操控一切”,这种颇具科幻感、未来感的交互方式,令许多人感叹“未来已来”。而这令人震撼的变革背后,正是空间计算技术的迅猛崛起与广泛应用,使得这种曾经只存在于想象中的交互方式,如今正逐…

快速访问github

修改本地hosts文件 GitHub访问慢的原因在于域名解析,通过修改本地的hosts文件,将远程DNS解析改为本地DNS解析。 fang 步骤1:打开hosts文件(没有就创建) host所在位置: C:\Windows\System32\drivers\etc…

linux jenkins 2.89.1 安装部署 持续构建svn下maven项目并部署到tomcat

从这边博文可以学习到: jenkins的安装修改主目录初始化新建任务,构建第一个maven项目将构建完成的项目部署到tomcat Jenkins的安装相当简单,只需要从官网下载war包,放入tomcat,运行tomcat就可以访问Jenkins了 准备工作…

PyCharm,终端conda环境无法切换的问题(二个解决方案)

问题 PyCharm终端,环境切换无效,默认始终为base 解决一 Settings->Tools->Terminal->ShellPath,将powershell修改为cmd.exe 解决二 conda config --show在输出中找到 auto_activate_base 的行,发现被设置为 true&#x…

数据结构-双链表(图解)

目录 双链表(Double-Linked List)的概念与基本特性 一、双链表的基本组成 二、双链表的主要特性 三、双链表的操作 代码展示 malloc开辟函数 解析 初始化 解析 头插 解析 尾插 解析 头删 解析 尾删 解析 pos之后插入 解析 pos删除 …

抖音小店无货源怎么做?教你新店快速起店新攻略,你还在等什么?

大家好,我是电商花花。 从我关注抖音小店这个风口到现在已经有很长时间了,从了解到实操到复盘,陆陆续续将多家单店店铺月营业额达到数百万。 目前团队运营着80多家店铺,人均管理3-5个店铺,大部分店铺月营业额都在5W-…

【C++】飞机大战项目记录

源代码与图片参考自《你好编程》的飞机大战项目,这里不进行展示。 本项目是仅供学习使用的项目 飞机大战项目记录 飞机大战设计报告1 项目框架分析1.1 敌机设计:1.2 玩家飞机控制:1.3 子弹发射:1.4 游戏界面与互动:1.5…

文本美学:text-image打造视觉吸引力

当我最近浏览 GitHub 时,偶然发现了一个项目,它能够将文字、图片和视频转化为文本,我觉得非常有趣。于是我就花了一些时间了解了一下,发现它的使用也非常简单方便。今天我打算和家人们分享这个发现。 项目介绍 话不多说&#xf…

OpenHarmony 上传和下载(API 10)教程~

介绍 本示例使用ohos.request接口创建上传和下载任务,实现上传、下载功能,hfs作为服务器,实现了文件的上传和下载和任务的查询功能。 效果预览 使用说明 1.本示例功能需要先配置服务器环境后使用,具体配置见上传下载服务配置。…

百度AI大会发布的APP Builder和Agent Builder有什么区别

百度在AI大会发布了三款AI工具,包括智能体开发工具AgentBuilder、AI原生应用开发工具AppBuilder、各种尺寸的模型定制工具ModelBuilder 有很多人就问,APP Builder和Agent Builder有什么不一样,怎么那么多builder? 你们就这么理解&#xff…

大语言模型隐私防泄漏:差分隐私、参数高效化

大语言模型隐私防泄漏:差分隐私、参数高效化 写在最前面题目6:大语言模型隐私防泄漏Differentially Private Fine-tuning of Language Models其他初步和之前的基线微调模型1微调模型2通过低秩自适应进行微调( 实例化元框架1) 在隐…

MySQL面试题 3

问题1:char、varchar的区别是什么? varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么? DELETE命令从一个表中删除某一行,或多行&#xff0…

机器学习系统的设计

1.混淆矩阵 混淆矩阵作用就是看一看在测试集样本集中: 真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做真正例(TP,True Positive),预测为真,实际为真真实值…