RTOS学习笔记---“二值信号量”和“互斥信号量”
在实时操作系统(RTOS)中,“二值信号量”和“互斥信号量”是两种常见的同步机制,用于线程之间的协调与资源管理。尽管它们有相似之处,都基于信号量概念,但它们的用途和行为存在重要区别。
1. 二值信号量(Binary Semaphore)
定义与特点:
- 二值信号量是信号量的一种特殊形式,其值只能为0或1。
- 典型用途:
- 用于任务同步:协调任务之间的执行顺序。例如,一个任务完成某件事情后,通知另一个任务继续执行。
- 用于事件通知:某个中断或事件发生时,通过二值信号量唤醒等待的任务。
工作机制:
- 初始化值:二值信号量通常初始化为1(表示资源可用)或0(表示需要等待资源)。
- 取信号量(Pend或Wait):如果信号量值为1,任务可以成功获取(同时信号量值置为0);如果信号量值为0,任务会进入等待状态,直到信号量被释放。
- 释放信号量(Post或Give):释放信号量后,其值变为1,并唤醒等待的任务(如果有)。
关键特性:
- 不具备所有权:二值信号量没有归属概念,任何任务都可以释放信号量,而不仅仅是获取信号量的任务。
- 不防止优先级反转:二值信号量没有处理优先级反转(Priority Inversion)的机制。
2. 互斥信号量(Mutex Semaphore)
定义与特点:
- 互斥信号量(Mutex)是设计用于任务间互斥访问共享资源的同步机制。
- 它是一种特殊的二值信号量,带有所有权和优先级继承的功能。
工作机制:
- 初始化值:互斥信号量初始值为1,表示资源可用。
- 取信号量(Pend或Lock):当一个任务获取互斥信号量后,其他任务无法获取(互斥信号量值变为0)。
- 释放信号量(Post或Unlock):仅拥有信号量的任务可以释放它,其他任务会继续等待,直到信号量被释放。
关键特性:
- 具备所有权:互斥信号量由当前持有者“拥有”,只有当前持有任务可以释放信号量。
- 防止优先级反转:互斥信号量采用优先级继承机制(Priority Inheritance)。当高优先级任务等待互斥信号量时,低优先级持有者会暂时提升其优先级到高优先级,直至释放信号量。
- 用于互斥资源管理:专门设计用于保护共享资源,避免竞争条件。
3. 二值信号量和互斥信号量的主要区别
| 区别点 | 二值信号量 | 互斥信号量 |
|---|---|---|
| 核心用途 | 任务同步、事件通知 | 互斥访问共享资源 |
| 所有权 | 无所有权,任何任务均可释放信号量 | 具有所有权,只有持有信号量的任务可以释放 |
| 优先级反转处理 | 不处理优先级反转 | 通过优先级继承机制防止优先级反转 |
| 复杂性 | 简单,轻量 | 更复杂,适用于需要严格资源保护的场景 |
| 适用场景 | 中断与任务之间的同步、任务之间的执行顺序协调 | 多任务对共享资源的访问控制 |
| 效率 | 开销较低 | 开销稍高,特别是带优先级继承机制的实现 |
4. 实际应用场景举例
二值信号量:
- 中断与任务同步:例如,硬件中断发生时释放二值信号量,通知等待的任务处理数据。
- 任务间简单协调:任务 A 完成初始化,释放信号量,让任务 B 继续执行。
互斥信号量:
- 共享资源保护:多个任务需要访问同一个文件、硬件设备或数据结构时,使用互斥信号量避免同时访问。
- 防止优先级反转:在高实时性场景中确保高优先级任务不被低优先级任务阻塞。
5. 总结
- 二值信号量强调简单的同步与通知,不涉及资源管理。
- 互斥信号量专注于对共享资源的互斥访问,并解决多任务调度中的优先级问题。
- 在实际开发中,根据应用场景选择合适的同步机制是关键。如果仅需要同步和事件通知,二值信号量更简单高效;而需要保护共享资源时,互斥信号量是更合适的选择。
相关文章:
RTOS学习笔记---“二值信号量”和“互斥信号量”
在实时操作系统(RTOS)中,“二值信号量”和“互斥信号量”是两种常见的同步机制,用于线程之间的协调与资源管理。尽管它们有相似之处,都基于信号量概念,但它们的用途和行为存在重要区别。 1. 二值信号量&…...
Oracle-物化视图基本操作
-- 物化视图 -- 与普通视图的区别:真实存在数据的 普通视图的数据在基表 物化视图看成是, 一个定时运行的计算JOB一个存计算结果的表 创建时生成数据: 分为两种:build immediate 和 build deferred, build immediate是在创…...
(功能测试)测试报告
其中的统计分析和测试结果确认是必须要有的; 测试过程回顾:测试的时间和阶段,是否出现延期,与预期的任务计划是否匹配; !统计分析:统计写多少用例,用例覆盖情况如何(100%…...
【LeetCode每日一题】——746.使用最小花费爬楼梯
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 746.使用最小花费爬楼梯 四【题目描述】 给你一…...
程序里sendStringParametersAsUnicode=true的配置导致sql server cpu使用率高问题处理
一 问题描述 近期生产环境几台sql server从库cpu使用率总是打满,发现抓的带变量值的慢sql,手动代入变量值执行并不慢,秒级返回,不知道问题出在哪里。 二 问题排查 用扩展事件或者sql profiler抓慢sql,抓到了变量值&…...
Vue3 el-table 默认选中 传入的数组
一、效果: 二、官网是VUE2 现更改为Vue3写法 <template><el-table:data"tableData"border striperow-key"id"ref"tableRef":cell-style"{ text-align: center }":header-cell-style"{background: #b7babd…...
最后一个单词的长度
题目详情: 解题思路: 用两个变量分别存储当前值和上次值,就可保证当前移动时记录字符个数,当遇到空格时,这次值保存到上次值,并清空。 代码解析: /* 最后一个单词的长度 */ #include <st…...
2024-11-19 kron积
若A[a11 a12; a21 a22]; B[b11 b12; b21 b22]; 则C[a11*b11 a12*b11 a21*b11 a22*b11; a11*b12 a12*b12 a21*b12 a22*b12; a11*b21 a12*b21 a21*b21 a22*b21; a11*b22 a12*b22 a21*b22 a22*b22] 用MATLAB实现 方法1: A [a11 a12; a21 a22]; B [b11 b12; b21 b22]…...
Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
目录 Redis 数据类型 一、String(字符串) 二、Hash(哈希) 三、List(列表) 四、Set(集合) 五、ZSet(sorted set:有序集合) 六、BitMap 七、HyperLogLog 八、GEO …...
树莓派2 安装raspberry os 并修改成固定ip
安装 安装raspberry os 没啥说的,到树莓派官网,下载制作启动映像盘的软件: https://www.raspberrypi.com/software/ 下载后,直接安装该软件,然后运行,选择好开发板的型号和操作系统型号,按照…...
11月第3周AI资讯
阅读时间:3-4min 更新时间:2024.9.9-2024.9.13 目录 DIAMOND:扩散模型在世界构建中的应用 阿里云推出Qwen2.5-Turbo:高效长文本处理,性价比卓越 微软:AI已实现几乎无限的记忆 Comfyui_Object_Migration一致性换衣模型 DeepSeek发布R1-Lite-Preview:推理AI竞争愈发…...
一次封装,解放双手:Requests如何实现0入侵请求与响应的智能加解密
引言 之前写了 Requests 自动重试的文章,突然想到,之前还用到过 Requests 自动加解密请求的逻辑,分享一下。之前在做逆向的时候,发现一般医院的小程序请求会这么玩,请求数据可能加密也可能不加密,但是返回…...
Notepad++--在开头快速添加行号
原文网址:Notepad--在开头快速添加行号_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad怎样在开头快速添加行号。 需求 原文件 想要的效果 方法 1.添加点号 Alt鼠标左键,从首行选中首列下拉,选中需要添加序号的所有行的首列ÿ…...
Python和MATLAB示例临床因素分析
🌵Python片段 为了演示临床因素的分析,让我们模拟一个数据集并执行一些基本的统计和机器学习分析。我们将重点关注以下步骤: 模拟数据集:创建具有年龄、性别、BMI、吸烟状况和疾病结果等特征的临床数据。描述性统计:…...
嵌入式硬件实战基础篇(二)-稳定输出3.3V的太阳能电池-无限充放电
引言:本内容主要用作于学习巩固嵌入式硬件内容知识,用于想提升下述能力,针对学习稳压芯片和电容以及电池之间的运用,对于硬件PCB以及原理图的练习和前面硬件篇的实际运用;太阳能是一种清洁、可再生的能源,广…...
【数据结构】树——链式存储二叉树的基础
写在前面 书接上文:【数据结构】树——顺序存储二叉树 本篇笔记主要讲解链式存储二叉树的主要思想、如何访问每个结点、结点之间的关联、如何递归查找每个结点,为后续更高级的树形结构打下基础。不了解树的小伙伴可以查看上文 文章目录 写在前面 一、链…...
STM32-- keil常见报错与解决办法
调试问题 1. keil在线调试需要点击好几次运行才可以运行,要是直接下载程序直接就不运行。 解决:target里面的use microlib要勾选,因为使用了printf。 keil在线调试STM32,点三次运行才能跑到main的问题解决。 keil在线调试STM32…...
【大数据学习 | Spark-Core】RDD的概念与Spark任务的执行流程
1. RDD的设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中&…...
一文读懂埋阻埋容工艺
PCB 埋阻埋容工艺是一种在 PCB 板内部埋入电阻和电容的工艺。通常情况下, PCB 上电阻和电容都是通过贴片技术直接焊接在板面上的,而埋阻埋容工艺则将电 阻和电容嵌入到 PCB 板的内部层中,这种印制电路板,其自下而上依次包括第一介电 层,隐埋电…...
mysql 数据表导出为 markdown(附 go 语言 gorm 的实际使用)
前言 通常业务系统开发中,数据库的设计与维护是至关重要的环节。而数据库的文档化则是确保团队成员之间有效沟通、快速理解系统架构的基础。 但目前数据文档都是手动写的,耗时费力,由于当前项目使用的是 mysql 作为存储引擎,找找…...
BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异
一、前言BLE设备交互分为两大角色:广播端(外设Peripheral)与扫描端(中心Central)。上一篇博客详解了四大广播模式,本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题:前台能扫后台…...
论文创新点像挤牙膏?导师强推这几个AI论文平台
想写论文又快又好,关键是用对 AI 工具、走对流程——资深教授普遍推荐:千笔AI(中文全流程首选) 豆包学术版(轻量高效) DeepSeek 学术版(理工 / 长文本) Grammarly Academicÿ…...
智慧无人机巡检-无人机可见光红外数据集 无人机多模态检测数据集 红外与可见光检测数据集
智慧无人机巡检-无人机可见光红外数据集,已完成标注,可导出各种常用数据集,yolo,voc,coco等格式。可见光33000张,红外16100张,目标一张一个 无人机可见光红外目标数据集项目详细信息数据集名称无…...
美团外卖mtgsig与waimai_sign双层签名逆向解析
1. 这不是“爬虫教程”,而是一份反向工程现场笔记你搜到这篇内容,大概率正卡在某个调试窗口前:抓包看到mtgsig和waimai_sign两个参数像两堵墙,无论怎么改请求头、换UA、清缓存,返回永远是{"code":403,"…...
电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案
在2026年的电信行业,海量工单处理已不再仅仅是效率问题,而是合规与生存的底线。随着2026年5月20日《电信和互联网服务 基础电信企业网上营业厅服务规范》国家标准的正式实施,监管层对“信息透明、流程闭环、计费精准”的要求达到了前所未有的…...
AI率总超标?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!
写论文效率低、熬夜赶稿、查重不过关?别慌!2026 年最新 AI 论文写作工具合集来了,覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程,帮你精准匹配最适合的学术助手,彻底告别论文内耗!🏆…...
C++ vector容器总结
vector基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间&a…...
终极免费音乐解锁工具:5步轻松解密你的加密音乐文件
终极免费音乐解锁工具:5步轻松解密你的加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...
网安学习第24天 PHP安全——PHP反序列化
一、序列化与反序列化 1、序列化serialize() 序列化是什么?序列化就是把程序中的对象、数组、结构体等复杂数据,转换成可以存储或传输的格式。 简单说: 把“内存里的对象”变成“字符串/字节流”。 例如 PHP 中有一个对象: $u…...
从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)
从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时,那种面对杂乱文件夹和神秘.mat文件的迷茫感,我太熟悉了。作为计算机视觉工程师…...
