信号量机制理论详解专题

 一文学懂信号量机制的各种大题,详细操作见下文~


        1965年,荷兰学者Dijkstra提出的信号量(Semaphores)机制是一种卓有成效的进程同步工具。在长期且广泛的应用中,信号量机制又得到了很大的发展,它从整型信号量经记录型信号量,进而发展为“信号量集”机制。现在,信号量机制已经被广泛地应用于单处理机和多处理机系统以及计算机网络中。 

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。

  • 信号量机制分 整型信号量机制、记录型信号量机制、and型信号量机制、信号量集。
  • 整型信号量是一种最简单的信号量,主要用于解决并发程序互斥访问临界资源问题。
  • 记号信号量在整型信号量的举出上进行了改进,让不能进入临界区的进程“让权等待”,即进程状态有运行转换为阻塞状态,进程进入阻塞队列中等待。
  • AND型信号量集是将进程在运行中所需要的临界资源全部一次性分配给进程,等进程用完后再全部一次释放。

整型和记录型的信号量是考研学子学习的重点~


 

问题提出

  • 进入区的检查和上锁操作无法一气呵成,从而导致了两个进程有可能同时进入临界区的问题~
  • 所有的解决方案都无法实现“让权等待”~

目录

一.信号量机制

1.整型

2.记录型信号量

二.互斥、同步、前驱 


一.信号量机制

        用户进程可以通过使用OS提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥和进程同步。

        信号量本质上是一种变量,可以是一个整数亦或是更加复杂的记录型变量。用信号量来表示系统中某种资源的数量(比如未婚优质对象的个数为1,则可以设置一个初值为1的信号量~)

        原语,之前也说过,是一种特殊的程序段,只能一气呵成——如果进入区、退出区的操作均由原语实现,就能避免检查和上锁无法一气呵成~

  • wait(S)和signal(S)两个原语,被简称为P、V操作~

1.整型

        wait原语(P操作)用来检验信号量是否足够以满足当前进程,如果不满足则卡死在循环等待;signal(V操作)当进程结束后,将此时富余的信号量归还~ (类别先检查后上锁~)

进程会发生忙等,不满足让权等待~) 

2.记录型信号量

 

 

(解决了让权等待~) ——来源于block的自我阻塞~

 

 

二.互斥、同步、前驱 

临界区:系统中的某些资源必须通过互斥来访问,访问那段系统资源的代码叫做临界区~

即——同一个时刻只能有一个进程进入临界区~ 

步骤:

  • 分析并发进程的关键活动,划定临界区
  • 设置互斥信号量mutex,初值为1
  • 在进入区P——申请资源
  • 在退出区V——申请资源 

(互斥信号量mutex本质上是一种进入临界区的名额~)

(semaphore定义的信号量为记录型信号量,本身不会产生“忙等”的现象~) 

  • 不同的临界资源需要设置不同的互斥信号量
  • PV操作必定成对出现~ 

即,要让各个并发的进程按要求有序地推进~

V操作可以理解为唤醒P操作的前提~ 

只有前面进程完成其后面的V获得信号量后——P后面的后置进程才有进入临界区的资格~

 王道的一个典例,仔细看!

牢记前V后P的口诀~

 王道的思维导图,很到位:

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

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

相关文章

LRU 缓存机制_题解(一道经典的数据结构算法题)

LRU 缓存机制_题解(一道经典的数据结构算法题) 146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int k…

spark介绍及简单使用

简介 Spark是由加州大学伯克利分校AMPLab(AMP实验室)开发的开源大数据处理框架。起初,Hadoop MapReduce是大数据处理的主流框架,但其存在一些限制,如不适合迭代算法、高延迟等。为了解决这些问题,Spark在20…

jmeter如何循环运行到csv文件最后一行后停止

1、首先在线程组中设置’循环次数‘–勾选永远 2、csv数据文件设置中设置: 遇到文件结束符再次循环?——改为:False 遇到文件结束符停止线程?——改为:True 3、再次运行就会根据文档的行数运行数据 (如果需要在循环控制器中&…

Git----学习Git第一步基于 Windows 10 系统和 CentOS7 系统安装 Git

查看原文 文章目录 基于 Windows 10 系统安装 Git 客户端基于 CentOS7 系统安装部署 Git 基于 Windows 10 系统安装 Git 客户端 (1)打开 git官网 ,点击【windows】 (2)根据自己的电脑选择安装,目前一般w…

【Unity自动寻路】使用Navigation系统实现物体自动寻路绕开障碍物

知识点流程图 自动导航Navigation系统 我们在游戏场景中经常会有一些障碍物、墙壁、树木等等,如果我想要让角色或者怪物去墙的另一边,我直接在墙另一边点击左键,我希望角色自动跑过去,但是他不能直接穿透墙,他需要“智…

java8新特性之-LocalDateTime

java8新特性之-LocalDateTime 首先,我们必须明确,JAVA为什么在有Date这个类的情况下,又引入了LocalDateTime 大体上来说。 java8引入为了解决旧的java.util.Date和java.util.Calendar等类在处理日期和时间时存在的一些问题,并提供…

[python]用python获取EXCEL文件内容并保存到DBC

目录 关键词平台说明背景所需库实现过程方法1.1.安装相关库2.代码实现 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 在搭建自动化测试平台的时候经常会提取DBC文件中的信息并保存为excel或者其他文件格式,用于自动化测试。本文…

一篇文章了解Flutter Json系列化和反序列化

目录 一. 使用dart:convert实现JSON格式编解码1. 生成数据模型类2. 将JSON数据转化成数据模型类3. 数据模型类转化成JSON字符串 二、借助json_serializable实现Json编解码1.添加json_annotation、build_runner、json_serializable依赖2. 创建一个数据模型类3. 使用命令行生成JS…

http状态码(一)400报错

一 400报错汇总 ① 综述 一、4xx状态码报错说明: 客户端行为导致的报错二、通用的4xxHTTP报错1) 4002) 4013) 4034) 4045) 405 --> 不允许方法,可能跨域或者nginx限制请求方法6) 4087) 4138) 419三、ngin自身定义的4xx报错495、496、497、498、4…

centOS7 安装tailscale并启用子网路由

1、在centOS7上安装Tailscale客户端 #安装命令所在官网位置:https://tailscale.com/download/linux #具体命令为: curl -fsSL https://tailscale.com/install.sh | sh #命令执行后如下图所示2、设置允许IP转发和IP伪装。 安装后,您可以启动…

Python框架批量数据抓取的高级教程

一、背景介绍 批量数据抓取是一种常见的数据获取方式,能够帮助我们快速、高效地获取网络上的大量信息。本文将介绍如何使用Python框架进行大规模抽象数据,以及如何处理这个过程中可能遇到的问题。 二、项目需求 我们将爬取大量知乎文章,讨…

机器学习 | 机器学习基础知识

一、机器学习是什么 计算机从数据中学习规律并改善自身进行预测的过程。 二、数据集 1、最常用的公开数据集 2、结构化数据与非结构化数据 三、任务地图 1、分类任务 Classification 已知样本特征判断样本类别二分类、多分类、多标签分类 二分类:垃圾邮件分类、图像…

为什么选择计算机?大数据时代学习计算机的价值探讨

还记得当初自己为什么选择计算机? 计算机是在90年代兴起的专业,那时候的年轻人有驾照、懂外语、懂计算机是很时髦的事情! 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的…

Leetcode刷题笔记题解(C++):224. 基本计算器

思路: step 1:使用栈辅助处理优先级,默认符号为加号。 step 2:遍历字符串,遇到数字,则将连续的数字字符部分转化为int型数字。 step 3:遇到左括号,则将括号后的部分送入递归&#x…

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问: 如果try中没有遇到问题,如何执行? 2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行? 2.3 灵魂三问&#x…

动态规划优化技巧

一、斐波那契系列 1、滚动数组优化空间复杂度 2、dp数组初始化/处理边界优化 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

NtripShare Mos监测平台边缘计算终端与自动优化平差算法

忙忙乎乎23年又要过去了,回头看今年做的事,只有两件事值得一提: 1、自动化监测边缘计算终端; 2、自动优化平差算法。 自动化监测边缘计算终端 终端采用全国产硬件方案终端支持全站仪供电控制终端支持远程控制终端支持数据缓存技…

WebLangChain_ChatGLM:结合 WebLangChain 和 ChatGLM3 的中文 RAG 系统

WebLangChain_ChatGLM 介绍 本文将详细介绍基于网络检索信息的检索增强生成系统,即 WebLangChain。通过整合 LangChain,成功将大型语言模型与最受欢迎的外部知识库之一——互联网紧密结合。鉴于中文社区中大型语言模型的蓬勃发展,有许多可供利…

arcgis更改服务注册数据库账号及密码

最近服务器数据库密码换了,gis服务也得换下数据库连接密码。传统官方的更改方式(上传连接配置文件): ArcGIS Server数据库注册篇(I) — 更新数据库密码_arcgis server sde换密码-CSDN博客 方式太麻烦了,需要安装ArcG…

PyTorch自动梯度计算(注意点)

if params.grad is not None: params.grad.zero_() 我们实际的运算往往会涉及到若干个requires-grad为true的张量进行运算,在这种情况下,Pytorch会计算整个计算图上的损失的导数,并把这些结果累加到grad属性中。多次调用backward()会导致梯度…