第2章 进程与线程(3)

news2024/11/19 9:38:39

2.3 同步与互斥

引入同步的原因是【进程的并发具有异步性,以各自独立不可预知的速度推进】

2.3.1 同步与互斥的基本概念

1.临界资源:一次仅仅允许一个进程所使用的资源叫做临界资源
2.同步:进程同步是确保多个进程在共享资源的访问过程中按照一定规则进行协调和管理的过程。
基本原则:

  • 空闲让进
  • 忙则等待
  • 有限等待
  • 让权等待(得不到处理机就进入阻塞态)

3.互斥:间接制约关系。一次只允许一个进程使用资源。


2.3.2 实现临界区互斥的进本方法

1.软件实现方法:
(1)算法一:单标志法:【只检查不上锁】

只有一个变量turn用于标记允许哪个进程访问。
资源只能轮流使用。若当前标记的是对方,即使对方没有使用,自己也不能使用
违背"空闲让进"原则:若当前标志不是当前需要访问的进程的标志,将会一直忙等。
在这里插入图片描述

(2)算法二:双标志法先检查:【先检查后上锁】(满足了“空闲让进”原则,允许交替使用)

使用bool型数组记录,哪个进程正在访问哪个进程的记录就位true
先检查对方是否占用资源,然后自己锁定资源
违背"忙则等待"原则:若两个进程的检查和上锁是交替运行的,会导致两个进程同时占用资源。(下图为例)【按照1,2,3,4顺序执行】
在这里插入图片描述

(3)算法三:双标志法后检查:【先上锁后检查】

使用bool型数组记录,哪个进程正在访问哪个进程的记录就位true
先对资源上锁,然后检查对方是否在使用
违背"空闲让进"原则:若两个进程的上锁和检查时交替运行的,会导致两个进程同时被对方锁住。会造成死锁(饥饿)(下图为例)【按照1,2,3,4顺序执行】
在这里插入图片描述

(4)算法四:皮特森算法:【结合算法一和算法三的思想】

同时使用bool数组和turn变量
bool数组表示进程想使用资源的意愿,turn表示可以让给其他进程先使用
先表明自己想使用资源,然后表示可以让其他进程先使用。若turn不是其他进程或其他进程没有使用资源的意愿,自己就可以占用资源。
违背"让权等待"原则:若资源不能得到,也不能下处理机。不存在死锁(饥饿)

在这里插入图片描述

单标志法双标志法先检查双标识法后检查皮特森算法
使用过程轮流使用先检查其他是否正在使用,在自己上锁先上锁,再检查其他进程是否在使用先表明自己想使用,再把使用权让给其他进程,若其他进程没有使用的意愿或使用权不在其他进程,则自己可以使用
缺陷违背"空闲让进"违背"忙则等待"违背"空闲让进"违背"让权等待"
使用变量一个公用整形变量"turn"一个bool数组"flag"一个bool数组"flag"一个公共整形变量"turn"和一个bool数组"flag"



2.硬件实现方法:
(1)中断屏蔽字

使用关中断和开中断来禁止切换进程,就不会出现互斥的问题。

优点:简单高效
缺点:不适合多处理机,只适合内核进程使用。可能会导致系统效率降低。

(2)硬件指令方法

由硬件逻辑上实现,不会被中断。
不能实现让权等待,产生饥饿现象

  • TestAndSet指令【一边检查一边上锁】
    本身为原子操作,不会被中断,也不允许关中断
    注意!!!【若长期使用,且在等待期间处于关中断状态,其他进程的操作会收到影响,从而影响到整个系统】

    优点:实现简单。适合多处理机系统【与总线相关】。
    缺点:不满足"让权等待",会持续等待
    在这里插入图片描述
  • swap指令【一边检查一边上锁】
    本身为原子操作,不会被中断,也不允许关中断
    优点:实现简单。适合多处理机系统【与总线相关】。
    缺点:不满足"让权等待",会持续等待
    在这里插入图片描述
硬件实现的优点:允许任意数量进程,单处理机和多处理机都适用!!!
硬件实现的缺点:不能让权等待,会产生`饥饿现象`

2.2.3 互斥锁

通过原子操作函数acquire()获得锁和release()释放锁。

属于`自旋锁`,需要循环忙等。{TSL,SWAP,单标志}都属于`自旋锁`
只适用于多处理机系统,互斥会导致进程处于持续等待的状态。

`为什么说适用于多处理机`:在忙等期间,单处理机会切换进程。若使用时间短但是使用频率很高造成切换进程的开销会增大。
多处理机只会使用`一个核`的资源,不影响其他核心。`单处理机`吃掉了唯一的核。

2.2.4 信号量{考试题目默认是记录型变量}

信号量用于解决同步和互斥问题。
使用原语【wait(s)/p操作】申请资源和【signal(s)/v操作】释放资源
p,v方式是一种低级的通信方式【相对于"共享存储",“消息传递”,“管道通信”】

1.整形信号量【不满足让权等待】

只有一个整数变量S用于记录资源的数量

`S>0说明有空闲资源`
`S<=0说明无空闲资源,其绝对值就是进程的等待数量`\\注意不是阻塞,而是等待。阻塞会放弃处理机,等待不会放弃处理机。

过程描述:
(1)wait函数用于申请资源,若s<=0,说明无资源可以使用,将进入循环等待阶段。
(2)signal函数用于释放资源(s=s+1)。若wait在等待时发现s>0,循环等待可以结束。
在这里插入图片描述

2.记录型信号量【满足让权等待】

使用结构类型变量semaphore记录资源数S和阻塞进程队列L

`s>0说明有空闲资源,s<0说明无空闲资源,s的绝对值就是阻塞队列中进程的个数`
`L代表申请资源却得不到资源的进程的队列`

过程描述:
(1)wait函数用于申请资源,先资源数-1,若s<=0,说明无资源可以使用,将插入阻塞队列队尾,且自动放弃处理机。

在这里插入图片描述
(2)signal函数用于释放资源(s=s+1)先资源数+1然后从阻塞队列唤醒队首进程,使其从阻塞态变成就绪态,等待处理机调度。
在这里插入图片描述

3.利用信号量实现同步,互斥和前驱关系

互斥设置信号量,整形s初始化设置为1,结构型s设置为资源数量。为0就阻止其他进程进入(先p后v)
同步设置信号量初始值由用户确定【可能已经存在资源】(先v后p)

在这里插入图片描述


2.3.5 管程【软件

每次仅仅允许一个进程在管程内执行某个内部过程/函数。
外部进程/线程只能通过管程提供的特定"入口"访问。每次只开放一个入口。
管程组成 { 1. 管程名称 2. 局部于管道内部的共享数据结构说明 3. 对于该数据结构操作的函数 4. 初始化内部数据语句 管程组成\begin{cases}1.管程名称\\ 2.局部于管道内部的共享数据结构说明\\ 3.对于该数据结构操作的函数\\ 4. 初始化内部数据语句 \end{cases} 管程组成 1.管程名称2.局部于管道内部的共享数据结构说明3.对于该数据结构操作的函数4.初始化内部数据语句

对比结构型信号量管程

结构型信号量管程
阻塞时机在wait操作/p操作内检查到资源不足1.在使用过程前已有进程使用,会被阻塞在过程外。2.过程内部检测到没有资源
signal/v操作包含了资源+1和唤醒操作其他过程给资源+1,调用signal时才唤醒

管程
在这里插入图片描述

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

相似点:条件变量的wait/signal操作类似信号量的P/V操作,可实现进程的阻塞唤醒
不同点:条件变量没有值,仅实现排队功能。信号量是有值的,反映剩余资源数量管程用共享数据结构记录。

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

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

相关文章

STM32CubeIDE基础学习-BEEP蜂鸣器实验

STM32CubeIDE基础学习-BEEP蜂鸣器实验 文章目录 STM32CubeIDE基础学习-BEEP蜂鸣器实验前言第1章 硬件介绍第2章 工程配置2.1 工程外设配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 前言 前面学习了LED闪烁实验&#xff0c;现在来学习一下蜂鸣器发声实验&am…

Stable Diffusion出图时,一次性比较多个lora的效果?

事前准备 在WebUI中&#xff0c;lora插件&#xff08;也算是模型&#xff09;的存放位置为&#xff1a; 你的WebUI启动器根目录\models\Lora 把训练好的&#xff0c;或者下载到的模型放到这个文件夹。 重启WebUI之后就会出现在这里 在Lora标签中 注意&#xff1a;这些lora需要…

前端接口防止重复请求实现方案

虽然大部分的接口处理我们都是加了loading的&#xff0c;但又不能确保真的是每个接口都加了的&#xff0c;可是如果要一个接口一个接口的排查&#xff0c;那这维护了四五年的系统&#xff0c;成百上千的接口肯定要耗费非常多的精力&#xff0c;根本就是不现实的&#xff0c;所以…

springboot基于JAVA的邮件过滤系统设计与实现

摘 要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;人类的生存和思考方式也产生了变化。传统邮件过滤、意见反馈采取了人工的管理方法&#xff0c;但这种管理方法存在着许多弊端&#xff0c;比如效率低下、安全性低以及信息传输的不准确等&#xff…

【剑指offer--C/C++】JZ25 合并两个排序的链表

题目 思路 这个题目大逻辑比较简单&#xff0c;就是一个比较和穿插&#xff0c;但细节上要考虑清楚&#xff0c;可以画个图模拟一下。我这里是设置将两个链表拆开组成一个新的链表&#xff0c;这样不需要占用新的空间。两个指针对应节点的值进行比较&#xff0c;那个节点值较小…

【2024第一期CANN训练营】3、AscendCL运行时管理

文章目录 【2024第一期CANN训练营】3、AscendCL运行时管理1. 初始化与去初始化2. 资源申请与释放2.1 申请流程2.2 释放流程2.3 运行模式&#xff08;可选&#xff09; 3. 数据传输3.1 接口调用流程3.2 主要数据传输场景1. Host内的数据传输2. 从Host到Device的数据传输3. 从Dev…

【深度学习】滴滴出行-交通场景目标检测

案例5&#xff1a;滴滴出行-交通场景目标检测 相关知识点&#xff1a;目标检测、开源框架的配置和使用&#xff08;mmdetection, mmcv&#xff09; 1 任务目标 1.1 任务和数据简介 本次案例将使用深度学习技术来完成城市交通场景下的目标检测任务&#xff0c;案例所使用的数…

「全栈」低代码时代开启!页面开发、数据处理、复杂逻辑统统一站搞定!

数字化浪潮的推进让企业对应用开发效率有着愈发严苛的要求。 传统的开发模式&#xff0c;无论是前端开发还是后端处理&#xff0c;都普遍面临周期长、成本高、响应慢、迭代难等问题&#xff0c;由于部分企业长期未进行创新改革&#xff0c;导致每次在新增系统功能时&#xff0…

【源码阅读】Mybatis底层源码分析(详细Debug查看附代码)

一、搭建测试代码框架 &#xff08;代码已提交到github->测试代码&#xff0c;建议结合代码根据本文debug一遍更有利于理解&#xff0c;帮忙点个Star 哈&#xff0c;本人在这里谢谢了&#xff09; 二、猜想Mybatis是如何设计的 从上面的案例中&#xff0c;可以大致可以猜测…

VMware虚拟机硬盘容量扩容方法

扩容后不会影响原文件。亲测有效&#xff0c;高效便捷 - 在关机状态下&#xff0c;先在VM上直接扩容硬盘容量&#xff0c;输入扩容后的硬盘最大容量 注意&#xff0c;如果想在原硬盘上增加容量&#xff0c;需要将原来的快照都删除 - 输入最大磁盘大小 运行虚拟机进入系统&…

【代码】伪标签图像随机生成

这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形&#xff0c;并确保它们之间以及与背景边界之间不会发生重叠 限制圆形的半径不超过150&#xff0c;第13行 import cv2 import random import os这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形&#xff0…

代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

题目&#xff1a;344.反转字符串 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:344.反转字符串 题目链接&#xff1a;力扣题目链接 图释&#xff1a; // 反转字符串 void reverseString(vector<char>& s) {// 直接使用反转的库函数 reverserev…

数字化转型之于国家:为三驾马车更新马达

随着国民经济和社会发展第十四个五年规划的开启&#xff0c;中国也进入了全面建设社会主义现代化国家的新发 展阶段&#xff0c;未来要在坚持“创新、协调、绿色、开放、共享”的新发展理念下&#xff0c;在质量效益明显提升的基础上实 现经济持续健康发展。持续的发展意味着…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

【爬虫】– 抓取原创力文档数据

使用RPA工具&#xff0c;实现针对于原创力中不可下载文档的抓取&#xff0c;可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器&#xff08;非指定&#xff09; 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档&#xff0c;抓取下来的数…

计算机网络 谢希仁(001-1)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.1到1.4的内容 简介 1.1计算机网络的作用 三网融合&#xff08;三网合一&#xff09; 模拟信号就是连续信号 数字信号是离散信号 1.2互联网概述 以前2兆带宽就要98 现在几百兆带宽也就几百块 …

海川润泽AI机器视觉仪系列产品,助推“人工智能+”打开新质生产力的大门

3月5日&#xff0c;第十四届全国人民代表大会第二次会议开幕。国务院总理李强在政府工作报告&#xff0c;提出大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。深入推进数字经济创新发展&#xff0c;制定支持数字经济高质量发展政策&#xff0c;积极推进数字产业化…

AI+权重衰退

AI权重衰退 1权重衰退2代码实现 2丢弃法 1权重衰退 AI权重衰退是指在人工智能&#xff08;AI&#xff09;领域中的一种技术或方法&#xff0c;用于训练机器学习模型时对权重进行惩罚或调整&#xff0c;以避免过拟合现象的发生。 在机器学习中&#xff0c;过拟合是指模型在训练…

Debug追踪

2.2 Debug追踪 使用IDEA的断点调试功能&#xff0c;查看程序的运行过程 在有效代码行&#xff0c;点击行号右边的空白区域&#xff0c;设置断点&#xff0c;程序执行到断点将停止&#xff0c;我们可以手动来运行程序 点击Debug运行模式 程序停止在断点上不再执行&#xff0c…

C/C++程序设计实验报告3 | 数组实验

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告&#xff0c;适合C语言初学者们学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是C语言&#xff0c;C的元素最多可能只…