61 - 进程互斥锁的详细设计

news2025/1/11 1:28:25

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. 问题
    • 1.1 生活中的示例
      • 1.1.1 吃饭问题
      • 1.1.2 十字路口
      • 1.1.3 洗手间
      • 1.1.4 生产消费者问题
    • 1.2 结论
  • 2. 接下来的问题
    • 2.1 临界资源(Critical Resource)
    • 2.2 临界区(Critical Section)
    • 2.3 任务间的同步
    • 2.4 任务间的互斥
    • 2.5 互斥锁(Mutex)的定义
    • 2.6 操作Mutex的关键函数
    • 2.7 Mutex使用示例设计
    • 2.8 课后扩展问题

1. 问题

  • 任务之间总是完全独立毫无依赖的吗?

1.1 生活中的示例

1.1.1 吃饭问题

在这里插入图片描述

1.1.2 十字路口

在这里插入图片描述

1.1.3 洗手间

在这里插入图片描述

1.1.4 生产消费者问题

  • 有n个生产者同时制造产品,并把产品存入仓库中
  • 有m个消费者同时需要从仓库中取出产品
  • 规则:
    • 一次只允许一个生产者向仓库放入产品
    • 一次只允许一个消费者从仓库取出产品
    • 生产者和消费者不能同时进入仓库

1.2 结论

在特殊情况下,并行执行的任务之间 存在依赖

2. 接下来的问题

  • 如何在操作系统中提供 任务间安全依赖的方式?

2.1 临界资源(Critical Resource)

  • 每次 只允许一个任务 进行访问(读 / 写)的资源 —— 临界资源

2.2 临界区(Critical Section)

  • 每次 只允许一个任务 执行的代码片段 —— 临界区

2.3 任务间的同步

同步在特殊情况下,控制 多个任务间的相对执行顺序

2.4 任务间的互斥

互斥多个任务 在同一时刻都需要访问 临界资源

2.5 互斥锁(Mutex)的定义

互斥锁 是一种 特殊的状态变量(空闲状态 & 占用状态

  • 当互斥锁处于空闲状态时:
    • 任务可成功获取锁并继续执行,也即访问临界资源
    • 锁被任务获取后,自动转化为占用状态
  • 当互斥锁处于占用状态时:
    • 试图获取锁的任务会被阻塞,直到锁再次转换为空闲状态

2.6 操作Mutex的关键函数

  • uint CreateMutex();
    创建锁,返回锁的唯一标识
  • void DestroyMutex(uint mutex);
    销毁指定标识的锁
  • void EnterCritical(uint mutex);
    当锁空闲时:获取锁并继续执行
    当锁占用时:阻塞并等待锁释放
  • void ExitCritical(uint mutex);
    释放锁( 同一把锁 的获取和释放必须在同一个任务中 成对出现

2.7 Mutex使用示例设计

在这里插入图片描述

  • 注意:对于指定的互斥锁,必须先获取再释放,并且获取与释放不能跨任务进行

2.8 课后扩展问题

  • Mutex相关函数接口处于用户态还是内核态?
  • Mutex处于占用状态时,试图获取Mutex的任务如何阻塞?
  • Mutex恢复空闲状态时,如何通知阻塞的任务继续执行?
  • 通过Mutex能否保证任务同步执行(即:串行执行)?

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

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

相关文章

【C3】cpu_wtd_sysfs

文章目录2.cpu_wtd_sysfs:switchboard.c (fpga下i2c访问Switch CPLD1,Switch CPLD2 :CPLD, FPGA , QSFP)scriptbmc_wtd:syscpld.c中wd_en和wd_kick节点对应寄存器,crontab,FUNCNAMEA…

Spring事务的隔离级别

事务的特性: 隔离性:多个事务在并发执行的时候,多个事务执行的一个行为模式,当一个事务执行的时候,另一个事务执行的一个行为模式是什么? 1)A,原子性,一个事务中的所有操作,要么全部执行成功&am…

I2C误码了怎么处理

我相信不少人有遇到I2C设备识别不到,或者概率性误码。 我相信大部分工程师的做法如下: 1.调整上拉电阻的大小,然后重新老化测试; 2.降低I2C速率,然后老化测试; 3.软件加入一定判断条件,将能…

Ncvicat 打开sql文件方法

Nacicat打开sql文件时,有比较多的文章介绍可以直接打开,方法介绍的比较多,但是我遇到了一个坑,就是如何配置环境都无法打开。 本机环境: windows10 mysql 5.7.40 Navicat12.1 一、遇到问题情况 1.1、通过navicat…

Kubernetes向集群外部暴露服务的方式你知道吗?

Kubernetes向进群外暴露服务的方式有三种:Ingress、LoadBlancer类型的Service、NodePort类型的Service。IngressIngress相当于service的service,可以将外部请求通过按照不同规则转发到对应的service。实际上,ingress相当于一个7层的负载均衡器…

面了一个月,终于让我总结出了这份最详细的接口测试面试题

目录 1、你们公司是如何做接口测试的? 2、什么时候开展接⼝测试? 3、接⼝测试和UI测试的工作是否重复? 4、接口测试框架怎么搭建? 5、接⼝之间有依赖时怎么处理? 6、如何判断接⼝测试的结果(成功或失败&a…

【C进阶】指针的高级话题

文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组…

昌德科技冲刺上市:计划募资约12亿元,蒋卫和为实控人

近日,深圳市昌德新材科技股份有限公司(下称“昌德科技”)递交招股书,准备在真真证券交易所主板上市。本次冲刺上市,昌德科技计划募资11.69亿元,中信建投证券为其保荐机构。 据招股书介绍,昌德科…

西电编译原理期末核心考点汇总(期末真题+相关知识点)

文章目录前言一、正规式1.1 相关知识点1.1.1 正规式定义1.1.2 辅助定义1.2 历年真题二、二义文法2.1 相关知识点2.1.1 二义性概念2.2 历年考题三、全部短语、直接短语和句柄3.1 相关知识点3.1.1 短语,直接短语和句柄定义3.1.2 短语,直接短语和句柄例题3.…

【企业管理】研发部视角提出对外支撑业务自助门户构思和实现

导读:公司是由不同部门组成,各个部门之间必然有协同才能使得公司各项职能正常运行。可以说公司的竞争力越强往往会得出公司内部之间工作协同就越高效,可以看出公司各部门之间协同对公司营运是十分重要的。高效协同前提必然是实现便利的信息共…

数据库设计表与表之间的关系详细介绍

文章目录数据库设计数据库设计简介表关系之一对多表关系之多对多表关系之一对一数据库设计 数据库设计简介 软件研发的步骤如下: 设计数据库还是很重要的 数据库设计概念: 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构…

Synology搭建Gitea(Docker)

Synology搭建Gitea(Docker) 文章目录Synology搭建Gitea(Docker)参考增加用户与用户组增加映像安装配置反向代理路由器端口转发参考 Nas轻量git方案:Docker安装Gitea;群晖(Synology) NAS 如何安装 gitea 增加用户与用户组 为所有Docer创建一个组docker; 权…

行测-判断推理-图形推理-样式规律-黑白运算

黑白元素个数不同,优先考虑黑白运算白白白黑黑白黑白黑选A考试时,这种题不要先把规律全部推出来,再去做题,太慢了直接看要推的图,通过排除法选答案黑白元素个数不同,优先考虑黑白运算白白白黑黑白黑白黑选B…

【5G RRC】5G系统消息SIB3介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

[python入门(52)] - python中的OS模块(包) - 1

目录 ❤ OS模块和path模块(函数) ❤ 当前路径及路径下的文件 ❤ 绝对路径 ❤ 查看指定文件路径的文件夹路径部分和文件名部分 ❤ 路径拼接 ❤ 获取路径的文件夹路径部分 ❤ 获取路径的文件名 ❤ 查看文件时间 ❤ 查看文件大小 ❤ 查看文件是否存在 ❤ OS模…

【原创】java+swing+mysql设备预约管理系统设计与实现

我们在办公室或者学校实验室的,经常需要使用一些设备,因此需要提前租借。今天我们主要介绍如何使用javaswing和mysql数据库去完成一个设备预约管理系统,方便用户进行设备管理和预约。 功能分析: 设备预约管理系统主要是为了方便…

医疗床头卡(基站方案)

一、产品特色 低功耗,常规使用3-5年电池寿命支持空中唤醒点阵电子纸屏幕安装简单,快速布置远程智能化管理低碳环保,无纸化安全可靠ESL_BWR7.5_V2二、系统结构 三、多基站组织架构 四、电子床头卡 接收路由器发送的数据信息并解析&#xff0…

深度学习之卷积神经网络学习笔记一

1. 引言深度学习是一系列算法的统称,包括卷积神经网络(CNN),循环神经网络(RNN),自编码器(AE),深度置信网络(DBN),生成对抗…

FreeRTOS优先级翻转

优先级翻转优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未…

16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)

知识要点 线性回归要点: 生成线性数据: x np.linspace(0, 10, 20) np.random.rand(20)画点图: plt.scatter(x, y)TensorFlow定义变量: w tf.Variable(np.random.randn() * 0.02)tensor 转换为 numpy数组: b.numpy()定义优化器: optimizer tf.optimizers.SGD()定义损失: …