【信号量机制及应用】

news2025/7/29 5:38:15

水善利万物而不争,处众人之所恶,故几于道💦

目录

一、信号量机制
二、信号量的应用

  >利用信号量实现进程互斥
  >利用信号量实现前驱关系
  >利用记录型信号量实现同步

三、例题
四、参考

一、信号量机制

  • 信号量是操作系统提供的管理公有资源的有效手段。
  • 信号量是一个整数
    • 当信号量>=0时,代表可供并发进程使用的资源数量
    • 当信号量<0时,表示处于阻塞状态的进程的个数
  • wait(S) ,也称为P操作; signal(S) ,也称为V操作

二、信号量的应用

1.利用信号量实现进程互斥
   进程的互斥是指系统中多个进程因争用临界资源而互斥执行。在多道程序系统环境中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用,称为临界资源(CriticalResource,CR),如打印机、共享变量和表格等。    为使多个进程互斥的访问某临界资源,须为该资源设置一互斥言号量mutex,并设其 初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间即可。

在这里插入图片描述

2.利用信号量实现前驱关系
   设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2。 使进程P1和P2共享一个公用信号量S,并赋予 其初值为0

在这里插入图片描述

3.利用记录型信号量实现同步
   在计算机系统中,多个进程可以并发执行,每个进程都以各自独立的、不可预知的速度向前推进,但是需要在某些确定点上协调相互合作进程间的工作。例如,进程A向缓冲区送数据,进程B从缓冲区取数据加工,当进程B要取数据加工时,必须是进程A完成了向缓冲区送数据的操作,否则进程B必须停下来等待进程A的操作结束。 可见,所谓进程间的同步是指在系统中一些需要相互合作,协同工作的进程,这样的相互联系称为进程的同步。

   p1,p2两进程因合作完成一项任务而共用一个变量x。进程p2将处理结果送入x;进程P1将x的结果打印。

在这里插入图片描述

在这里插入图片描述

分析:
1.刚开始 empty 信号量=1 因为刚开始缓冲区是空的;full=0,缓冲区中没有数据,所以full=0

2.先看p2,因为p2往缓冲区中放入数据后,p1才能取出打印,所以先 wait(empty) ,申请到信号量后,将x放入缓冲区,然后将 full 信号量+1,p1才能申请到信号量(执行这一步的时候full信号量为0,p1申请不到信号量,只有这一步最后执行完将full+1,p1才能开始执行,也就实现了同步的效果

3.因为上一步最后把full信号量+1,所以p1可以申请到信号量,然后打印x,再将 empty 信号量+1

三、例题:

在这里插入图片描述在这里插入图片描述

信号量提示:
在这里插入图片描述

技巧:前驱图中有几个有向边就设置几个信号量、执行前先要进行 wait-P 操作然后进行 signal-V 操作

四、参考

利用信号量实现进程互斥:
进程互斥是指多个进程在访问共享资源时,需要相互排斥,以避免对共享资源的冲突访问。利用信号量可以很容易地实现进程互斥。我们可以为共享资源设置一个二元信号量,初始值为1,表示该资源可用。当一个进程要访问该共享资源时,它需要首先获取该信号量,将其减1,然后才能访问该资源。当该进程完成对该资源的访问后,需要将该信号量加1,表示该资源已经释放,其他进程可以访问该资源。这种方法可以确保同一时间只有一个进程可以访问该资源。
利用信号量实现前驱关系:
前驱关系是指一个节点在有向图中的前置节点。利用信号量可以很容易地实现前驱关系。我们可以为每个节点设置一个信号量,表示它是否可以被访问。当一个进程要访问某个节点时,它需要首先获取该节点的前置节点的信号量,然后才能获取该节点的信号量。如果前置节点的信号量为0,则当前进程需要等待,直到前置节点的信号量为1。这种方法可以确保每个节点只有在其前置节点完成访问后才能被访问。
利用信号量实现进程同步:
进程同步是指多个进程在执行过程中需要相互协调,以避免对共享资源的冲突访问。利用信号量可以很容易地实现进程同步。我们可以设置一个计数信号量,初始值为0,表示当前没有进程可以执行。当一个进程完成一定的操作后,需要将该信号量加1,表示有一个进程可以执行。当其他进程需要执行时,它们需要首先获取该信号量,如果信号量的值大于0,则可以执行,否则需要等待。当一个进程完成操作后,需要将该信号量减1,以便其他进程可以执行。这种方法可以确保多个进程在执行过程中相互协调,以避免对共享资源的冲突访问。

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

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

相关文章

现在招个会自动化测试的人是真难呀~你会个锤子的自动化测试

现在招个会自动化测试的人是真难呀~ 前一段时间公司计划要招2个自动化测试到岗&#xff0c;同事面试了十几个来应聘的人&#xff0c;发现一个很奇怪的现象&#xff0c;在面试的时候&#xff0c;如果问的是框架API、脚本编写这些问题&#xff0c;基本上所有人都能对答如流&…

centos6下为Rstudio安装多版本R

之前的R版本太旧,不少包装不上,需要安装新版本的R: R --version R version 3.6.0 (2019-04-26) -- "Planting of a Tree"于是下载最新版R: 因为没有证书,需要加上最后面的参数. wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.2.2.tar.gz --no…

MySQL OCP888题解042-审计日志格式

文章目录1、原题1.1、英文原题1.2、中文翻译1.3、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3.1、知识点1&#xff1a;审计日志3.1.1、审计日志是什么3.1.2、审计日志格式4、总结1、原题 1.1、英文原题 Consider the MySQL Enterprise Audit plugin. You are check…

好使!NAS中傻瓜式配置反向代理及SSL证书,提升网络安全性!

对于有NAS或者有个人主机的朋友来说&#xff0c;将机器映射到外网是基本操作。 但是一般来说&#xff0c;能直接从外网访问的往往仅有80和443端口。事实上&#xff0c;运营商一般把家庭宽带的这两个端口都封了&#xff0c;所以如果我们想要从外网访问自己家中机器部署的服务&a…

【Ajax】异步通信

一.概述 概念&#xff1a;AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML 作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使…

设计模式-第11章(观察者模式)

观察者模式观察者模式观察者模式的特点老板回来了观察者模式 观察者模式又叫发布订阅模式。 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能…

nextcloud挂载阿里云oss 过程

1. 情景 &#xff1a; 已经使用docke-compsoe 搭建起来nextcloud 并投入使用 &#xff0c;现在内存不够需要挂一个oss nextcloud挂载阿里云oss大概思路 &#xff1a; 使用阿里官方提供的 ossfs &#xff0c; 将oss挂载到服务器目录中 &#xff0c; 在docker-compose中的 做容…

ArcGIS10.6“License许可启动无响应”解决方法

以下是我尝试过的方法关闭防火墙&#xff08;很必要&#xff09;替换 “Service.txt” 及 "ARCGIS.exe"文件&#xff08;感觉没什么用&#xff09;修改服务设置&#xff08;很必要&#xff09;更改注册表&#xff08;可有&#xff09;更改端口号&#xff08;好像没什…

My RuoYi 微服务

一 快速了解 文档&#xff08;特别详细&#xff09;&#xff1a;介绍 | RuoYi 介绍 技术架构&#xff08;图&#xff09;&#xff1a;介绍 | RuoYi快速了解 技术选型 系统环境主框架持久层视图层内置功能 用户管理&#xff1a;用户是系统操作者&#xff0c;该功能主要完成系…

HBase---HBase基础语法

HBase基础语法 文章目录HBase基础语法基本操作进入 HBase 客户端命令行查看命名空间查看命名空间下的表创建命名空间创建表查看表描述禁用/启用删除表新增列族删除列族更改列族存储版本的限制put 增加数据get 查看数据get条件查询删除指定列族下的指定列删除指定行全表扫描全表…

Java线程池之线程复用原理解析

什么是线程复用 在Java中&#xff0c;我们正常创建线程执行任务&#xff0c;一般都是一条线程绑定一个Runnable执行任务。而Runnable实际只是一个普通接口&#xff0c;真正要执行&#xff0c;则还是利用了Thread类的run方法。这个rurn方法由native本地方法start0进行调用。我们…

2023最新设计模式常见面试题汇总进大厂必备

2023最新设计模式常见面试题汇总1.说一下设计模式&#xff1f;你都知道哪些&#xff1f;2.什么是单例模式&#xff1f;3.什么是简单工厂模式&#xff1f;4.什么是抽象工厂模式&#xff1f;5.什么是观察者模式&#xff1f;1&#xff09;定义观察者&#xff08;消息接收方&#x…

201809-3 CCF 元素选择器 满分题解(超详细注释代码) + 解题思路(超详细)

问题描述 解题思路 根据题意可以知道在查询中可以分为两种情况 第一种是查询一个标签选择器或者id选择器&#xff08;可以称为一级查询&#xff09; 第二种就是存在大于两级的查询&#xff08;可以称为多级查询&#xff09; 显然第一种查询需要存储每一种元素在内容中所有出现…

2023 最新计算机视觉学习路线(入门篇)

计算机视觉是人工智能的一个领域&#xff0c;专注于教计算机解释和理解视觉世界。它涉及使用算法、深度学习模型和其他技术使机器能够识别图像或视频中的对象。计算机视觉可用于各种任务&#xff0c;如面部识别、目标检测、图像分割、运动估计和跟踪等。重要性计算机视觉的重要…

Leetcode DAY 57: 回文子串 and 最长回文子序列

647. 回文子串 题目&#xff1a; Given a string s, return the number of palindromic substrings in it. A string is a palindrome when it reads the same backward as forward. A substring is a contiguous sequence of characters within the string. 1、暴力解法&#…

docker-compose+HAProxy+Keepalived搭建高可用 RabbitMQ 集群

基础环境准备 系统环境&#xff1a;Centos7.6 Docker version&#xff1a; 1.13.1, build 7d71120/1.13.1 Docker Compose version&#xff1a; v2.2.2 三个节点&#xff1a; 10.10.11.79 &#xff08;这一台做rabbitmq集群根节点&#xff09; 10.10.11.80 (这台做haproxyke…

K8S Pod健康检查

因为 k8s 中采用大量的异步机制、以及多种对象关系设计上的解耦&#xff0c;当应用实例数 增加/删除、或者应用版本发生变化触发滚动升级时&#xff0c;系统并不能保证应用相关的 service、ingress 配置总是及时能完成刷新。在一些情况下&#xff0c;往往只是新的 Pod 完成自身…

Python|蓝桥杯进阶第二卷——贪心

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划&#xff08;待续&#xf…

关于信息安全认证CISP、PTE对比分析

CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师&#xff08;以下简称PTE&#xff09; 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心&#xff0c;政府背景给认证做背书&#xff0c;学员信息都在中国政府可控的机构手中&#xff1b; 如果想在政府、国…

TryHackMe-Tardigrade(应急响应)

Tardigrade 您能否在此 Linux 端点中找到所有基本的持久性机制&#xff1f; 服务器已遭到入侵&#xff0c;安全团队已决定隔离计算机&#xff0c;直到对其进行彻底清理。事件响应团队的初步检查显示&#xff0c;有五个不同的后门。你的工作是在发出信号以使服务器恢复生产之前…