17.进程同步与死锁——信号量临界区保护

2023-11-10

1.温故知新

通过对信号量的访问和修改,让进程有序推进
问题: empty值必须是正确的,如果empty错了,就不能有序推进了

2.共同修改信号量引出的问题

//生产者
Producer(item)
{
    P(empty);//生产者先判断 缓存区个数 empty是否满了,empty == 0,阻塞
    ...
}

//生产者P1
register = empty;
register = register - 1;
empty = register;

//生产者P2
register = empty;
register = register - 1;
empty = register;

//初始情况
empty = -1; //空闲缓冲区的个数,-1表示有一个进程在睡眠

//一个可能的执行(调度)
P1.register = empty; // P1.register = -1
P1.register = P1.register - 1; // P1.register = -2

P2.register = empty; // P2.register = -1;
P2.register = P2.register - 1; // P2.register = -2

empty = P1.register; // empty = -2
empty = P2.register; // empty = -2

如果正确执行,empty初始值为 -1,P1执行完,empty = -2,P2执行完,empty = -3
上边的例子,empty = -2

所以,信号量empty 需要保护

3.竞争条件

竞争条件:和调度有关的共享数据语义错误
错误是由多个进程并发操作共享数据 引起的
错误和调度顺序有关,很难发现和调试
需要加保护,保证调度的正确执行
有的程序中 会加空循环,减少调度的错误概率,但是不会根本解决调度问题

4.解决竞争条件的直观想法

在写共享变量empty时,给empty上锁, 阻止其他进程访问empty
受保护的 代码段 一次只允许一个进程进入,不能被分割的代码段称为原子操作

//仍然是上边出错的执行序列
P1.register = empty;
P1.register = P1.register - 1;

P2.register = empty;
P2.register = P2.register - 1;

empty = P1.register;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

17.进程同步与死锁——信号量临界区保护 的相关文章

  • 不讲武德---不用代码爬虫

    有人问 我不会代码 我能爬虫吗 我 很快啊 回答 可以 不需要写代码的 那当然是需要工具了 较为熟知的爬虫工具有八爪鱼 和web scraper 这次我所使用的是web scraper 安装web scraper 这篇文章讲述的算清晰的了
  • JetBrains插件推荐

    JetBrains软件本身就是效率神器 配合上一些好用的插件 效率就更是飞升了 本文就简单记录一些好用的插件和简介 持续更新 安装方法都很简单 这里就不过多叙述了 实在不会就百度一下 Chinese Simplified Language
  • smb windows中使用的文件共享协议(主要用于与windows互通)

    主要是samba服务 SMB协议又成为CIFS Common Internet File System 协议 samba服务功能 1文件共享 2打印共享 3加入windows2000 2003 2008域环境 4通过windows域环境进行
  • 黑马程序员并发编程笔记(二)--java线程基本操作和理解

    3 java进程的基本操作 3 1 创建进程 方法一 直接使用 Thread 构造方法的参数是给线程指定名字 推荐给线程起个名字 用setName 也可以 Thread t1 new Thread t1 Override run 方法内实现
  • 跳跃游戏(LeetCode)

    一 题目 55 跳跃游戏 难度 中等 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例1 输入 nums 2 3 1 1 4 输出 true
  • fftw3/gsl/kissfft/OouraFFT库中傅里叶变换/反傅里叶变换函数和Matlab中的fft/ifft的对应关系

    先分析一维度的 一 fftw plan dft 1d 正变换 fftw complex in fftw malloc sizeof fftw complex n fftw complex out fftw malloc sizeof fft
  • 如何用Flask和Redis来动态维护Cookies池

    为什么要用Cookies池 目标网站需要登录才能爬取 例如新浪微博 爬取过程中 如果请求频率过高 会导致封号 这就需要维护多个账号的Cookies池实现大规模爬取 Cookies池的要求 自动登录更新 定时验证筛选 提供外部接口 Cooki
  • 如何使用JAVA获取当前环境下的MAC地址

    在Windows下很简单直接运行脚本命令就可以了 public static String getMac try Process process Runtime getRuntime exec cmd exe c ipconfig all
  • 2023,8种必备Selenium编写自动化用例的技巧!

    在开始自动化时 您可能会遇到各种可能包含在自动化代码中的方法 技术 框架和工具 有时 与提供更好的灵活性或解决问题的更好方法相比 这种多功能性导致代码更加复杂 在编写自动化代码时 重要的是我们能够清楚地描述自动化测试的目标以及我们如何实现它
  • SPADE阅读笔记

    SPADE阅读笔记 目录 SPADE阅读笔记 作者的方法 spatial adaptive denormalization SPADE generator 为啥SPADE work better 同样的 作者提出一个simplt but e
  • 分巧克力(蓝桥杯C/C++B组真题详解)

    目录 题目 编辑 题目思路 代码详解 题目 题目思路 因为答案唯一 且分布在一个区间里面 我们可以想到二分答案 直到找到最小的满足的条件的 合适答案 代码详解 include
  • JavaScript的运算符

    目录 一 算术运算符 1 优先级 2 模运算 3 4 自增 5 自减 二 关系运算符 比较运算符 三 逻辑运算符 1 逻辑与 2 逻辑或 3 逻辑非 四 赋值运算符 1 格式 2 要求 3 复合赋值运算符 五 位运算符 1 按位与 2 按位
  • edp和edt哪个好_香水edt和edp什么意思 香水等级分类说明

    这次引发我写这篇小科普的灵感 是因为我恰巧看到一个文在各种溢美之词地推荐一款售价过千的EDT小众香水 EDT留香很短 卖价过千让我实在有点难接受 现在安利香水的推文随处可见 但发现不少只是一个劲地赞美多好闻 却连最基本的香水等级分辨都没好好
  • java 日志时间错误

    java 时区错误 解决方法 问题 参考链接 电脑上所有 java 应用 项目时间都不对 核心业务系统启动后日志时间和当前系统时间差11个小时30分钟 电脑用的是云桌面系统有严格的权限控制 找相关人和同事弄了几次没好 都知道是时区问题 但没
  • Vue3-wangeditor富文本编辑器的使用

    wangeditor官网 用于 Vue React wangEditor开源 Web 富文本编辑器 开箱即用 配置简单https www wangeditor com v5 for frame html vue3 按照官网提示安装 两个都要
  • 【Linux】Linux中的gcc/g++编译器的使用

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 编译的过程 1 预处理阶段 1 1预处理的工作 头文件
  • 如何让2008服务器访问所有网页,Windows Server 2008 R2 下配置证书服务器和 HTTPS 方式访问网站...

    Windows Server 2008 R2 下配置证书服务器和 HTTPS 方式访问网站 实验准备 一台 Windows server 2008 r2 的虚拟机 实验目的 为什么要用 HTTPS 实验步骤 1 配置 CA 证书服务器 1开
  • Android Studio 的原生输入框控件 EditText 属性配置详解

    Android Studio 的原生输入框控件 EditText 属性配置详解 文本设置 android hint 默认文本设置 android textColorHint 95A1AA 默认文本颜色 android textColorHi
  • 论文笔记:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FORINTERPRETABLE TIME SERIES FORECASTING

    ICLR 2020 0 摘要 本文重点研究了利用深度学习解决单变量时间序列点预测问题 我们提出了一种基于后向和前向残留链路和一个非常深的全连接层堆栈的深度神经结构 该体系结构具有许多令人满意的特性 这些特性是可解释的 适用于广泛的目标领域而

随机推荐

  • Mybatis简介及其快速入门及其映射文件详解

    一 Mybatis简介 1 1原始jdbc操作 查询数据 1 2原始jdbc操作 插入数据 1 3 原始jdbc操作的分析 原始jdbc开发存在的问题如下 数据库连接创建 释放频繁造成系统资源浪费从而影响系统性能 sql 语句在代码中硬编码
  • Xilinx平台SRIO介绍(汇总篇)

    用最简单直白的语言记录复杂的FPGA设计 FPGA大叔 沃自己硕得 目录 前言 一 SRIO扫盲篇 RapidIO协议介绍 二 Xilinx平台SRIO IP核基础知识 三 SRIO时钟与复位 四 SRIO IP核配置使用教程 五 示例工程
  • 四旋翼无人机学习第4节--STM32、MPU9250等器件的绘制

    注意 本博客主要是复现小马哥四轴 即从画板 焊接 0 前言 当画stm32 mpu9250这种多引脚的芯片 就需要参考芯片手册啦 这里给大家推荐一个芯片手册查询网站 半导小芯 芯片查询工具 进入网站 输入芯片的具体名称 点击查询即可 最后点
  • 使用Maven构建微服务项目踩过的坑及学习心得(持续更新)

    前言 本文为个人在学习微服务架构的过程中的心得汇总 以便于自己未来回看和帮助其他遇到同样的问题的同学 初学者 敬请包涵 该文会随着学习阶段的深入不断改进和更新 1模块构建 1 1整模块打包 直接在微服务项目根目录下输入mvn clean i
  • wazuh 原理分析之Syscollector 系统信息收集工作流程

    wazuh是从ossec hids衍生过来的 部分架构设计有所不同 多进程多线程模式 本机的进程之间通过Unix domain socket 进行通信的 今天简单介绍一下数据搜集的相关功能的实现 Linux系统 注意由于篇幅所限 在函数中我
  • Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为

    博雯 发自 凹非寺量子位 报道 公众号 QbitAI Facebook全球宕机6小时的原因 是公司内部工程师的一条错误指令 最近 Facebook官方针对这次大规模宕机的原因做了回应 这一新闻已经出现在了微博热榜 而在回复中 官方也 针对各
  • httprunner使用总结

    背景 在准备做接口自动化的过程中 了解到httprunner是一种简洁 不会代码的人也可以快速上手的框架 维护人员只需要编写并维护json或yaml文件 即可实现自动化测试 在结合httprunnerV2 X中文使用文档 应用于自己的项目中
  • WSDL实例解析

    WSDL的主要文档元素 WSDL文档可以分为两部分 顶部分由抽象定义组成 而底部分则由具体描述组成 抽象部分以独立于平台和语言的方式定义SOAP消息 它们并不包含任何随 机器或语言而变的元素 这就定义了一系列服务 截然不同的应用都可以实现
  • 类的默认成员函数2 --- 析构函数

    析构函数 1 概念 前面通过构造函数的学习 我们知道一个对象时怎么来的 那一个对象又是怎么没呢的 析构函数 与构造函数功能相反 析构函数不是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的一些资源
  • RK3368 RK3128编译问题总结

    1 build build machine rk3288 kernel make rk3288 tb 8846 img scripts kconfig conf silentoldconfig Kconfig C build build m
  • 【1】python二级——操作题

    目录 基本操作题 题目一 题目二 题目三 简单应用 题目四 题目五 综合应用 题目六 问题1 问题2 总结 基本操作题 题目一 考生文件夹下存在一个文件PY102 py请写代码替换横线 实现以下功能 使用calendar模块 从键盘输入年份
  • 微信报错:“code“:“40001“

    微信通知报错 code 40001 code 40001 message invalid credential access token is invalid or not latest rid 6285b05b 6dc11ee1 4a77
  • 解决:class invalid for deserialization序列化的问题(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP 看了一篇文章受到了启发 https blog csdn net qukaiwei article details 50367761 下面我加入自己的理解 咱们来说说AOP 一 到底什么是AOP 面向切面编程
  • conda install R语言报错问题血泪解决

    今天在安装conda之后 想安装r语言环境 却遇到如下报错 真的超级郁闷 conda install r Collecting package metadata current repodata json failed CondaHTTPE
  • LeetCode 2488. 统计中位数为K的子数组

    题目描述 给你一个长度为 n 的数组 nums 该数组由从 1 到 n 的 不同 整数组成 另给你一个正整数 k 统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目 注意 数组的中位数是按 递增 顺序排列后位于 中间 的那个元
  • sqli - labs -Less - 7 ~ 8

    输入id 1显示正常 输入id 1 报错 这里我们无法从错误信息中找到我们需要的东西 就要用到盲注了 lt 这里的盲注指的是布尔盲注 gt 所谓盲注就是我们去猜测数据库的长度等等 再结合语句去验证从而得到我们想要的信息 我们依然是用burp
  • 在HTML5中有什么可以替代iFrame

    最佳解决方法 通常有4种方法可以将HTML嵌入到网页中 iframe的内容完全位于当前页面不同的上下文中 虽然这是一个很棒的功能 而且是不同浏览器版本之间兼容最好的 但是它也带来了额外的问题 将frame大小跟网页内容设置一致比较麻烦 AJ
  • C语言代码覆盖率测试工具-OpenCppCoverage介绍

    代码覆盖率测试工具名称 OpenCppCoverage 简介 OpenCppCoverage是2014年推出的Windows平台下开源的C 代码覆盖率工具 类似于Linux下gcc内嵌的gcov工具 它不需要在编译时插桩 只需要有编译生成的
  • 17.进程同步与死锁——信号量临界区保护

    1 温故知新 通过对信号量的访问和修改 让进程有序推进 问题 empty值必须是正确的 如果empty错了 就不能有序推进了 2 共同修改信号量引出的问题 生产者 Producer item P empty 生产者先判断 缓存区个数 emp