1819_ChibiOS的互斥信号与条件变量

news2024/11/16 8:51:48

         全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

1. 关于会吃信号与条件变量的全局配置提供了4个配置信息,分别是互斥信号的使能、互斥信号的递归支持、条件变量的使能、条件变量的超时使能。

2. 不同于一般的信号量,互斥信号是全都绑定线程的。

3. 针对互斥信号的递归操作是指,同一线程可以多次锁定信号,但是也要解锁对应的次数才能够允许其他的线程获取。

1. 互斥信号绑定了两个信息,其中一个是拥有互斥信号的线程引用,另一个是等待线程的引用队列。

2. 在API提供方面,提供了try功能的安全设计接口,这样可以兼容信号已经被其他线程取走时候的便捷设计处理。

3. 从是否带有try的两个lock的对比可以看得出来,没有try的API,在信号已经被其他线程占用了的情况下会导致等待。而try接口则会跳过去。

4. 全部解锁的功能,在一个线程只拥有一个互斥信号的情况下执行效率更高,采用这种方式可以加速执行效率。

1. 条件变量本质上是一个线程队列,wait操作会释放上一次获取到的互斥信号,然后把当前的任务加入到条件变量队列中。

2. 条件变量信号发送或者广播执行的时候,会重新获取之前释放的互斥信号,之后从wait返回。

3. 1和2的动作其实是上面图中的2个可以来回跳转的状态。

1. 条件变量不能够单独使用,需要结合互斥信号。他的理解可以参考这个三间房的模型来理解。互斥信号的锁定可以作为一个触发信号来触发进入状态机的条件,进入所谓的“中庭”状态,这个状态其实是一个排队过程。形象一点理解,也就是说这个lock的动作,触发了一个中庭排队的动作。当请求互斥信号的时候,从中庭的排队成员中取出一个,进入到主房间。而这个主房间不是队列,是一个单个元素。此时,如果解锁互斥信号,那么整个状态就会结束。这也跟前面所说的,条件变量不能单独使用必须与互斥信号结合使用对的起来。到此为止,其实还没有涉及到条件变量,只是涉及到了互斥信号。如何涉及到条件变量呢?当互斥信号获取到之后,通过条件变量wait API来触发就可以来到这个条件变量队列中进行等待。这个条件变量的等待队列,是模型中的等待房间排队。等不及的时候,可以同等待房间退出。而chCondSignal API则会让“中庭”多一个等待人员。

2. 监控器的代码模板流程:先lock一个互斥信号,之后等待条件满足,最后释放互斥信号。

         针对上面的模型处理的内容,感觉上还是一个提供以及消耗的过程。提供方检查队列,如果队列不满就写,满了就等。而对于消耗方来说,如果队列不空就读,空了就等。在这里,互斥量可以保证信息的一致性。

         如果是涉及到中断,中断一般是作为一个提供方。不同线程可以等待阻塞,中断一般会直接跳过。不过,可能会有信息或者数据因此丢失。

         这就是互斥信号与条件变量的一个简单小结,其中互斥信号其实是容易理解的,这个条件变量理解的有一点费劲。或许,得看到一个实际的使用场景例程才能够更准确理解这个设计的意图。

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

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

相关文章

jQuery图像查看插件Zoom.js

效果图 图片点击放大,再次点击或者滚动窗口或者按 ESC 键即可恢复原始大小,非常流畅,使用方法也非常简单,引入zoom.js和zoom.css文件之后,对图片添加data-action"zoom"属性即可。 使用方法 1,将…

【网络】详解http协议

目录 一、认识URLurlencode和urldecode 二、HTTP协议HTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 一、认识URL URL叫做统一资源定位符,也就是我们平时俗称的网址,是因特网的万维网服务程序上用于指定信息位置的表示方法。 urlencode和urldecode …

21.10 Python 使用CRC32校验文件

CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出&#xff0c…

初次学习dubbo记录

---------------------------------------10.17---------------------------------------- 集群和分布式概念 集群:很多"人"做的相同的一件事,即使有一个人挂掉了,也不会对系统造成致命影响 分布式:很多"人"…

外卖小程序:技术实现与关键代码

在当今数字化的餐饮市场中,外卖小程序扮演着重要的角色。这些应用程序通过技术实现点餐、支付和配送,为用户提供方便快捷的服务。下面我们来深入探讨构建外卖小程序的关键技术要点和代码示例。 1. 前端开发 前端是用户与应用程序交互的接口&#xff0…

三年轻量:腾讯云3年轻量2核2G4M服务器366上三年时长

腾讯云轻量应用服务器三年特价,3年轻量2核2G4M服务器,2023双十一优惠价格366元三年,自带4M公网带宽,下载速度可达512KB/秒,300GB月流量,50GB SSD盘系统盘,阿腾云atengyun.com分享腾讯云轻量2核2…

晚上没事干又想利用时间赚钱,那就做副业,不要再懒了

很多朋友白天上班工作不是那么累,晚上下班后又比较空闲,如果一晚上不想被游戏、短视频、电影填满的话,那可以做一些兼职副业来扩宽收入来源,不仅充分利用了时间,还赚取了额外的收入。 晚上能做的兼职副业可太多了&…

AQS 为什么要使用双向链表?

双向链表 双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链…

基于STM32两轮自平衡小车系统设计与控制

**单片机设计介绍,1650【毕设课设】基于STM32两轮自平衡小车系统设计与控制 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 主控芯片用的是100脚的STM32F103VET6,陀螺仪用的是MPU6050,电机…

基础课12——数据采集

数据采集是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。采集一般是采样方式,即隔一定时间(称采样周期)对同…

线性表的定义和基本操作

线性表的定义和基本操作 一、线性表的定义 线性表(Linear List)是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表。若用L命名线性表,则其一般表示为 L (a1,a2,...,ai,ai1,.…

防止请求重复提交:注解+拦截器的实现方案

文章目录 了解请求重复提交解决思路具体实现 了解请求重复提交 请求重复提交是指用户在一次请求还未处理完成时,重复提交了相同的请求。这种情况通常发生在网络延迟、用户误操作或系统性能不佳等情况下。 请求重复提交可能会导致以下问题和影响: 数据不…

学习笔记:二分图

二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色&am…

C语言之 结构体,枚举,联合

目录 1.结构体 1.1结构的基础知识 1.2结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2位段的内存分配 2.3 位段的跨平台问题 3. 枚举 3.1 枚举类型…

Mybatis简介(二)

1、多表映射 简介一 链接 对于数据库的操作,很多时候我们都是在多表的基础上进行操作的,在这里讲一下多表属性值与列名映射。 案例:这里有一个订单表和一个客户表 CREATE TABLE t_customer (customer_id INT NOT NULL AUTO_INCREMENT, cus…

在 Elasticsearch 中丰富你的 Elasticsearch 文档

作者:David Pilato 对于 Elasticsearch,我们知道联接应该在 “索引时” 而不是查询时完成。 本博文是一系列三篇博文的开始,因为我们可以在 Elastic 生态系统中采取多种方法。 我们将介绍如何在 Elasticsearch 中做到这一点。 下一篇博文将介…

node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)

文章目录 ⭐前言⭐ 环境准备⭐ 实现过程⭐ mysql 配置⭐路由前的准备⭐账号注册生成token⭐账号登录生成token⭐token登录 ⭐ 自测过程截图⭐总结⭐结束 ⭐前言 大家好,我是yma16,本文分享关于node实战——后端koa项目配置jwt实现登录注册(n…

1230. K倍区间(前缀和)

题目&#xff1a; 1230. K倍区间 - AcWing题库 突破口&#xff1a; 区间遍历枚举一般先枚举右端点&#xff0c;再枚举左端点&#xff0c;注意由右端点限制左端点 思路&#xff1a;1.暴力 #include<cstdio> #include<iostream> #include<algorithm> #incl…

Win 7 VPN拨号错误734.

正在验证用户名和密码错误 734: PPP 链接控制协议终止。 如果您继续收到错误信息&#xff0c;您可以启用日志记录来做分析。 其他电脑拨号都成功.就这个电脑不行.找了很久,修改之后报好成功 ************************** 找到是跟下面两个两个注册表信息有关,尤其是第一个我…

基于Pytest+Requests+Allure实现接口自动化测试!

一、整体结构 框架组成&#xff1a;pytestrequestsallure设计模式&#xff1a; 关键字驱动项目结构&#xff1a; 工具层&#xff1a;api_keyword/参数层&#xff1a;params/用例层&#xff1a;case/数据驱动&#xff1a;data_driver/数据层&#xff1a;data/逻辑层&#xff1a…