二值信号量(Binary Semaphore)和互斥量(Mutex)的解析

FreeRTOS 互斥信号量和二值信号量对比 互斥信号量 1.有优先级继承。 2.尽量不要在中断中调用 3.xSemaphoreCreateMutex创建后,可以直接take使用。 二值信号量 1.无优先级继承。 2.允许在中断中调用。 3.可以当做标志位来使用。 4.xSemaphoreCreateBinary创建后,必须得先give一下才能被take。 这么说其实很笼统,直接代码测试。 这里使用的是互斥信号量。 1.创建两个测试任务,app_mqtt_get_properties_handle_task和app_mqtt_se 阅读详情

在嵌入式系统和实时操作系统(RTOS)中,同步和互斥是确保任务间正确交互和资源有效管理的关键。二值信号量(Binary Semaphore)和互斥量(Mutex)作为两种常用的同步机制,在功能和应用上各有千秋。本文将从多个角度深入探讨这两种机制的区别和应用场景。

一、定义与基本概念

二值信号量(Binary Semaphore):二值信号量是一种特殊的信号量,其状态只有两种:可用(通常表示为1)和不可用(通常表示为0)。它主要用于任务间的同步和简单的互斥访问。二值信号量可以看作是长度为1的队列,队列要么为空(信号量为0),要么为满(信号量为1)。
互斥量(Mutex):互斥量是一种用于确保在任何时刻只有一个线程能够访问共享资源的机制。互斥量也是二进制的,但相比二值信号量,它增加了“持有权”的概念,即只有当前持有互斥量的任务才能释放它。这使得互斥量在保护共享资源时更加严格和可靠。

二、主要区别

状态数量:

二值信号量只有两个状态:可用和不可用。
互斥量虽然在表面上看似只有两个状态(锁定和解锁),但实际上它包含了更多的状态信息,如持有者信息等,以支持递归访问和优先级继承等特性。

持有权:

互斥量具有明确的“持有权”概念,只有当前持有互斥量的任务才能释放它。
二值信号量则没有这样的概念,任何任务都可以释放它。

计数机制:

二值信号量的计数只能为0或1,表示资源的可用与否。
互斥量在内部实现上可能采用计数机制(尽管对于基本的互斥访问来说,计数通常为1),但更多的是通过状态标志来管理访问权限。

应用场景:

二值信号量适用于简单的同步和互斥场景,如任务间的同步或简单的资源访问控制。
互斥量则更适用于需要严格保护共享资源访问的场景,如全局变量、共享内存等的保护,以及需要递归访问或优先级继承的场景。

【FreeRtos教程五】STM32 CubeMx——Binary and Counting Semaphore(二进制信号量和计数型信号量) 前面介绍队列(queue)我们可以用于在任务之间、任务和中断之间传输数据,但是有时候我们只是需要传递状态,并不需要传递具体的信息,由此引出本文所介绍的信号量 阅读详情

相关推荐

FreeRTOS信号量实战:从原理到UART解析器应用

信号量是嵌入式实时操作系统中实现任务同步与互斥的核心机制,其本质是通过计数器管理共享资源的访问秩序。在FreeRTOS中,二值信号量用于单一资源的互斥访问,计数信号量适用于管理多个同类资源实例,而互斥信号量则通过优先级继承机制防止优先级反转问题。这些机制对于构建稳定可靠的多任务系统具有重要价值,尤其在资源受限的嵌入式场景中。在实际应用中,信号量常用于UART通信、缓冲区管理等任务间通信场景。例如,在UART命令解析器设计中,二值信号量可用于高效通知数据到达,而互斥量则能保护共享的环形缓冲区,确保数据一致性。

weixin_30315435的博客 818

C 语言编程 — semaphore 信号量操作

二元信号量(Binary Semaphore),即:计数器维护的 Value 只有 0 和 1 着两种可能,以此来实现互斥,所以也称为互斥信号量。信号量(semaphore)是一种常被用于多线程或多进程场景中的同步机制,用于保证多线程或多进程对共享数据的读/写操作是顺序的。:当线程完成了共享数据的访问后,应该使用 sem_post() 释放二元信号量,即:将 Value 变 1,让其他线程可以获取。另外,二元信号量的使用应尽量避免死锁问题的发生,即:避免出现多个线程相互等待的情况。

烟云的计算 2302

FreeRTOS二值信号量原理与实战:互斥同步与中断通信

二值信号量是实时操作系统中实现任务间同步与互斥访问的基础机制,其本质是取值为0或1的状态标记,用于传递‘资源可用’或‘事件发生’的确定性信号。基于队列模型实现,具备原子性、阻塞唤醒和中断安全特性,可有效替代轮询与全局标志等不可靠手段。在嵌入式开发中,它支撑着SPI外设互斥访问、传感器数据生产者-消费者协同、中断触发任务唤醒等关键场景,是构建低功耗、高响应、强确定性系统的必备原语。本文深入解析FreeRTOS中xSemaphoreCreateBinary、xSemaphoreTake和xSemaphoreGi

weixin_42451850的博客 44

FreeRTOS第8篇:同步的“信号灯”——信号量与互斥锁

在FreeRTOS中,信号量(Semaphore)和互斥锁(Mutex)正是这样的“交通信号灯”,它们协调任务对共享资源的访问,确保系统高效且安全地运行。本篇将深入源码,解析信号量与互斥锁的设计与实现。

指尖动听知识库 355

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1761

别再折腾Windows了!Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境保姆级搭建指南

本文提供Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境的详细搭建指南,涵盖系统优化、UHD驱动编译、Vivado配置及硬件验证等关键步骤,帮助射频工程师高效构建稳定的开发环境,显著提升FPGA开发效率。

weixin_29168675的博客 253

从SSTS到CTS:解码汽车电子架构中的需求与实现规范

本文深入解析汽车电子架构中SSTS(子系统功能规范)与CTS(零部件技术规范)的转换过程,揭示从抽象需求到物理实现的关键步骤。通过实际案例说明如何将SSTS的功能逻辑、接口定义和性能指标转化为具体的CTS实施方案,并分享多供应商协同与测试验证的最佳实践,帮助开发者高效完成汽车电子系统开发。

weixin_29201859的博客 494

FlowPic实战:从流量到图像的端到端加密应用识别

本文深入解析了FlowPic技术如何将网络流量转化为图像,并利用CNN模型进行端到端加密应用识别。该方法通过分析数据包大小和时序信息生成流量图像,有效绕过加密内容,实现对视频、聊天、文件传输等应用的精准分类。文章提供了从流量抓取、图像生成到轻量级CNN模型设计与训练的完整实战指南,并探讨了在VPN、Tor等复杂场景下的应用与挑战。

weixin_29046035的博客 145

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 471

Unity卡通渲染实战:原神PMX模型Blender转FBX全流程

卡通渲染是二次元游戏开发的核心技术之一,其本质在于对光照模型、顶点色控制与边缘光生成的精准建模。本文从基础概念切入,解析MMD PMX格式的数据结构原理,阐明顶点色(Vertex Color)与Toon Ramp贴图在风格化渲染中的技术价值;进而覆盖Blender到Unity的跨引擎资产流转关键路径,重点解决法线校准、骨骼命名适配、FBX导出参数配置等工业级断点问题;最终落地于Unity内置管线与URP双环境下的卡通Shader定制与Render Feature实现。内容聚焦原神风格角色资产重铸实践,涵盖P

weixin_38166557的博客 431

STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度

详细介绍了STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度。

kevin1499的博客 5585

携程滑块、点选验证码登录识别逆向

本文分析了携程登录系统的风控机制,主要包含三种验证场景:无验证码、滑块验证码和二次图标点选验证码。通过跟踪risk_inspect风控接口,发现验证流程采用标准AES加密,需提交设备指纹等加密信息。当触发验证码时,需额外提交包含轨迹坐标的verify_msg参数及token/rid参数。最终通过风控检测后,需使用一致的指纹参数和验证token完成加密登录。文章强调所有分析仅用于学习,代码实现需确保符合法律规范。

码王吴彦祖的博客 1089

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: USB设备在Linux系统中的识别和加载过程
下一篇: stm32 bootloader跳转程序设计
盼海
博客等级 码龄13年 8350粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值