当前位置: 首页 > article >正文

20 鸿蒙LiteOS信号量原理实战:信号量作用、MAX_COUNT含义、线程同步源码解析

鸿蒙LiteOS信号量原理实战信号量作用、MAX_COUNT含义、线程同步源码解析一、前言本文基于小凌派 RK2206鸿蒙LiteOS标准示例代码从零讲解LiteOS内核信号量核心概念为什么需要信号量、信号量能干什么、MAX_COUNT参数真实含义搭配完整源码逐行解析、运行逻辑拆解适合鸿蒙单片机、LiteOS多线程入门学习。哔站视频《05RK2206 OpenHarmonyOS 鸿蒙 什么是信号量 为什么需要信号量 代码演示》https://www.bilibili.com/video/BV1to5W6pETF/?vd_source3a9dd7a328acafb09dd1b8d05f3e2bf7哔站视频《04RK2206 OpenHarmonyOS 鸿蒙 任务实战》https://www.bilibili.com/video/BV15R5E6JEHy/哔站视频《03RK2206 鸿蒙 LiteOS 如何通过控制编译选项编译不同案例》https://www.bilibili.com/video/BV15e5J6QEGY/?spm_id_from333.1387.homepage.video_card.clickvd_source3a9dd7a328acafb09dd1b8d05f3e2bf7哔站视频《02RK2206 鸿蒙 LiteOS bin 文件 烧写》https://www.bilibili.com/video/BV1pcRdBaEAt/?spm_id_from333.1387.homepage.video_card.clickvd_source3a9dd7a328acafb09dd1b8d05f3e2bf7哔站视频《01RK2206 鸿蒙 LiteOS ubuntu 开发环境 全程 安装配置》https://www.bilibili.com/video/BV1nrRkBoEMR/?spm_id_from333.1387.homepage.video_card.clickvd_source3a9dd7a328acafb09dd1b8d05f3e2bf7二、信号量核心概念通俗讲解1. 什么是信号量信号量可以简单理解为线程之间的通行证/令牌。线程想要执行业务逻辑必须先申请拿到信号量拿不到信号量就会阻塞休眠不占用CPU资源只有其他线程主动释放信号量后等待的线程才能被唤醒继续执行。2. 为什么要有信号量裸机开发单任务顺序执行不存在资源争抢问题但LiteOS是多线程操作系统多个线程会抢占CPU、同时操作共享资源会出现执行顺序混乱、共享数据错乱、业务逻辑失控等问题。信号量就是用来解决多线程两大核心痛点线程同步控制多个线程的执行节奏和先后顺序不让线程无序抢占运行资源互斥保护串口、外设、全局变量等共享资源保证同一时刻只有一个线程访问。3. 信号量主要用途多线程任务同步统一调度线程执行时机临界资源互斥访问防止多线程同时操作引发数据异常线程间通信协作一个线程触发、多个线程响应执行。三、MAX_COUNT参数深度解析1. 参数定义#defineMAX_COUNT4// 创建计数信号量LOS_SemCreate(MAX_COUNT,m_sem);2. 核心含义MAX_COUNT是计数信号量的最大上限值信号量内部计数值永远不能超过MAX_COUNT最多可以连续释放MAX_COUNT次信号量当信号量计数已经达到最大值时再调用LOS_SemPost释放信号量会执行失败、无效累加。3. 生活化类比把信号量比作固定车位的停车场MAX_COUNT 4停车场总共只有4个空位LOS_SemPost车辆驶出空余车位1LOS_SemPend车辆驶入空余车位-1车位最多4个无法凭空多出第5个对应不能连续释放5次信号量。4. 规则示例允许连续释放最多4次信号量计数逐步涨到4禁止连续释放计数已经为4时再调用LOS_SemPost无效无法变成5。若设置MAX_COUNT 1就变成二值信号量只能释放1次常用于简单互斥锁场景。四、完整示例源码#includelos_sem.h#includeohos_init.h#defineMAX_COUNT4staticunsignedintm_sem;/*************************************************************** * 函数名称: control_thread * 说 明: 控制线程函数 * 参 数: 无 * 返 回 值: 无 ***************************************************************/voidcontrol_thread(){unsignedintcount0;while(1){/*释放两次信号量sem_one_thread和sem_two_thread同步执行; 释放一次信号量sem_one_thread和sem_two_thread交替执行*/LOS_SemPost(m_sem);printf(control_thread Release twice Semaphore\n);LOS_Msleep(1000);}}/*************************************************************** * 函数名称: sem_one_thread * 说 明: 信号量线程函数1 * 参 数: 无 * 返 回 值: 无 ***************************************************************/voidsem_one_thread(){while(1){/*申请信号量*/LOS_SemPend(m_sem,LOS_WAIT_FOREVER);printf(sem_one_thread get Semaphore\n);}}voidsemaphore_example(){unsignedintthread_crtl;unsignedintthread_id1;unsignedintthread_id2;TSK_INIT_PARAM_S task1{0};TSK_INIT_PARAM_S task2{0};TSK_INIT_PARAM_S task3{0};unsignedintretLOS_OK;retLOS_SemCreate(MAX_COUNT,m_sem);if(ret!LOS_OK){printf(Falied to create Semaphore\n);return;}// 发送任务task1.pfnTaskEntry(TSK_ENTRY_FUNC)control_thread;task1.uwStackSize2048;task1.pcNamecontrol_thread;task1.usTaskPrio24;retLOS_TaskCreate(thread_crtl,task1);if(ret!LOS_OK){printf(Falied to create control_thread ret:0x%x\n,ret);return;}// 接受任务task2.pfnTaskEntry(TSK_ENTRY_FUNC)sem_one_thread;task2.uwStackSize2048;task2.pcNamesem_one_thread;task2.usTaskPrio24;retLOS_TaskCreate(thread_id1,task2);if(ret!LOS_OK){printf(Falied to create sem_one_thread ret:0x%x\n,ret);return;}}APP_FEATURE_INIT(semaphore_example);五、源码运行逻辑解析程序入口初始化创建最大计数为4的信号量依次创建三个优先级相同的线程控制线程、等待线程1、等待线程2两个等待线程一启动就调用LOS_SemPend永久阻塞等待信号量无信号量则一直休眠控制线程每隔1秒执行一次逻辑普通计数周期释放1次信号量两个等待线程交替执行每3个周期连续释放2次信号量两个等待线程同时被唤醒同步执行全程由信号量管控线程唤醒时机实现多线程精准同步。六、LiteOS信号量常用API汇总API函数功能说明LOS_SemCreate创建计数信号量设置最大计数值LOS_SemPend申请信号量可设置阻塞等待时间LOS_SemPost释放信号量信号量计数加1LOS_SemDelete删除信号量释放内核资源七、运行打印效果示例八、总结信号量是LiteOS多线程核心同步工具本质是线程通行证MAX_COUNT是信号量计数上限限制最大连续释放次数不可超量释放本示例实现了一个控制线程调度两个业务线程完美演示信号量线程同步用法计数信号量适合多线程同步二值信号量适合简单资源互斥可根据业务场景灵活选用。

相关文章:

20 鸿蒙LiteOS信号量原理实战:信号量作用、MAX_COUNT含义、线程同步源码解析

鸿蒙LiteOS信号量原理实战:信号量作用、MAX_COUNT含义、线程同步源码解析 一、前言 本文基于小凌派 RK2206鸿蒙LiteOS标准示例代码,从零讲解LiteOS内核信号量核心概念:为什么需要信号量、信号量能干什么、MAX_COUNT参数真实含义&#xff0c…...

keil 使用UTF8格式的文件,但是printf打印中文已经是乱码的问题

文件格式是UTF8 无bom格式 打开文件显示是正常的 编译器选择的是ANSI格式 编译依旧产生警告 在 Project → Options → C/C → Misc Controls 添加 --no-multibyte-chars就可以解决; 但是ai给我这个方案,我还没有尝试 –wide-chars 示例是这样的 wchar_…...

Hi3559AV100 MPP开发:从IMX334到HDMI输入,VI参数配置避坑指南(含/proc/umap解析)

Hi3559AV100 MPP开发实战:非标准HDMI输入与VI参数配置深度解析 当我们需要在Hi3559AV100平台上接入HDMI视频源时,传统的MIPI摄像头配置方案往往无法直接适用。本文将从一个真实项目案例出发,详细讲解如何将原本为IMX334 MIPI摄像头设计的VI参…...

数据分析实习面试准备全攻略:专业知识+项目深挖+行为面试,职卓科技的面试辅导体系

摘要数据分析实习面试通常包含三大模块:专业知识考察(SQL、Python、统计学基础)、项目深挖(业务理解、技术选择、问题解决)、行为面试(团队协作、学习能力、职业规划)。很多学员在面试中表现不佳…...

STM32实战:用HAL库搞定RS485 Modbus液压传感器数据采集(附自动收发电路避坑)

STM32实战:HAL库驱动RS485 Modbus液压传感器全流程解析 液压系统压力监测的稳定性往往取决于传感器数据采集的可靠性。在工业现场,RS485总线搭配Modbus RTU协议已成为液压传感器数据传输的黄金标准。本文将深入探讨基于STM32 HAL库的完整解决方案&#x…...

多目标粒子群混合储能优化配置【附算法】

✨ 长期致力于混合储能、优化配置、风光互补微电网、多目标粒子群算法、CRITIC-TOPSIS研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)风光-负荷多场景…...

电能质量治理三相光伏逆变器设计【附程序】

✨ 长期致力于MPPT、电能质量治理、改进哈里斯鹰、重复控制、预置补偿角、模糊PI研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于混沌哈里斯鹰算法…...

Fawkes踩过的坑以及如何解决非常详细

首先我是用anaconda创建的一个虚拟环境 fawkes_env后续的所有操作都是在该环境中实现 不使用anaconda 可直接看第一步 坑:直接用 conda create -n fawkes python3.9 后,pip install -e . 可能因为 TensorFlow 版本过新导致不兼容(Keras 2.3…...

粒子群灰狼优化算法稀疏码设计【附代码】

✨ 长期致力于稀疏码多址接入、星型正交振幅调制、功率不平衡码本、粒子群算法、混合粒子群灰狼优化算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1&#xff…...

2026年项目管理工具测评:10款主流软件对比与企业选型建议

本文测评 ONES、Tower、Jira、Asana、monday、ClickUp、Notion、Trello、Microsoft Project、Smartsheet 十款项目管理工具,帮助选型人员从组织规模、项目复杂度、协作方式与治理需求出发,判断哪类项目管理工具更适合自身团队。一、10款项目管理工具速览…...

告别I帧卡顿!用H.264帧内刷新(Intra Refresh)让你的直播码率稳如老狗

告别I帧卡顿!用H.264帧内刷新(Intra Refresh)让你的直播码率稳如老狗 直播技术发展到今天,画面流畅度已经成为用户体验的核心指标之一。但许多开发者在实际推流中常遇到一个棘手问题:明明网络带宽充足,却在…...

Vit工程化应用(timm 库)

pip install timm import timm import torch from PIL import Image import requests from io import BytesIO# 1. 加载模型 (ViT Base版本,16x16图块,在ImageNet-1k上预训练) # 设置 pretrainedTrue 自动下载权重 model timm.create_model(vit_base_pa…...

从CAD到PCB的‘神同步’:利用Altium Designer图层映射,让你的丝印层(Top Overlay)自动对齐结构孔

从CAD到PCB的‘神同步’:Altium Designer图层映射实战指南 在消费电子和嵌入式设备开发中,PCB与外壳结构的精确对齐常常成为产品落地的最后一道障碍。想象一下:当结构工程师更新了智能手表外壳的3D模型,新增了螺丝孔位和屏幕开口&…...

AI信息摘要工具:从数据采集到智能推送的完整实践指南

1. 项目概述:一个AI驱动的每日信息摘要工具最近在GitHub上看到一个挺有意思的项目,叫“ai-daily-digest”。光看名字,你大概能猜到它的核心功能:利用人工智能技术,自动为你生成每日的信息摘要。作为一个经常被信息洪流…...

前端八股文面经大全:上海威派格前端实习(2026-05-07)·面经深度解析

前言 大家好,我是木斯佳。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的…...

【研报 A114】2026人工智能时代企业技能管理数字化转型白皮书:AI驱动全生命周期闭环,迭代速度提升70%

摘要:智能汽车产业加速升级,车企正面临员工技能迭代的核心挑战,AI 原生技能管理成为转型关键。依托生成式 AI、多智能体等技术,全新的技能管理体系贯穿技能梳理、培养、评估、应用全生命周期,将技能转化为车企的核心无…...

VR大空间项目屡获行业大奖,AI数字人公司赋能文旅智慧升级

在经历了早期的概念普及和单点试验后,AI数字人、VR、MR等技术正在文旅行业完成从“尝鲜”到“刚需”的蜕变。不再仅仅是博物馆或景区里的一块互动屏幕,而是一套能够重塑服务流程、活化文化IP、创造全新消费场景的完整解决方案。从边疆秘境到城市地标&…...

书匠策AI课程论文一键生成?我替你们踩了一遍,真香预警!

各位论文困难户们,先别划走! 今天不聊别的,就聊一个让我这个老博主都直呼"离谱"的东西——书匠策AI的课程论文功能。我知道你们一看到AI写论文就条件反射觉得是割韭菜,但这次,我是真的被圈粉了。 先说结论…...

靠谱的工程防火门公司推荐工程防火门

在工程行业摸爬滚打十几年,我见过太多因防火门翻车的项目:验收反复返工、产品用了两三年就变形卡死、超大门洞找不到厂家定制…… 这些看似鸡毛蒜皮的小事,一旦卡到消防验收节点上,轻则赔钱延期,重则被责令停工整改。今…...

如何在30秒内获取国家中小学智慧教育平台电子课本:终极解析工具指南

如何在30秒内获取国家中小学智慧教育平台电子课本:终极解析工具指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容…...

Windows 11任务栏拖放功能终极修复指南:3步恢复高效操作体验

Windows 11任务栏拖放功能终极修复指南:3步恢复高效操作体验 【免费下载链接】Windows11DragAndDropToTaskbarFix "Windows 11 Drag & Drop to the Taskbar (Fix)" fixes the missing "Drag & Drop to the Taskbar" support in Windows…...

Windows安卓子系统终极指南:从基础配置到专业开发全流程

Windows安卓子系统终极指南:从基础配置到专业开发全流程 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想要在Windows 11上无缝运行安卓应用吗&…...

感统训练的真实效果能持续多久?会不会反弹?

​直接给出结论:常见的感统训练维持周期短、反弹率高,多数孩子训练效果仅能保持3-6个月。一旦停止课程,大部分孩子会逐步退回原有状态。感统只能调整身体感官反应,无法从根源提升大脑自控力,治标不治本。感统训练适用人…...

C# 实时查看硬件使用率(CPU 内存 硬盘 网络)

一、整体架构 ┌─────────────────────────────────────────────────────────────┐ │ 硬件资源监控系统 │ ├────────────────────────…...

2026年强烈建议收藏:八大热门AI编程工具权威评测

AI编程工具已全面进入智能体时代,从单一代码补全进化为全流程开发引擎。本文精选8款全球主流工具,从核心能力、场景适配、使用体验等维度客观解析,为开发者提供精准选型参考。 一、Trae(字节跳动旗下)—— 全链路AI原生…...

企业内如何通过 Taotoken 实现 API 访问权限的精细化控制与审计

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内如何通过 Taotoken 实现 API 访问权限的精细化控制与审计 当企业将大模型能力引入内部工作流时,如何安全、可控地…...

ComfyUI-Impact-Pack终极指南:快速掌握AI图像增强的完整教程

ComfyUI-Impact-Pack终极指南:快速掌握AI图像增强的完整教程 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: ht…...

Poppins字体终极指南:免费开源的多语言几何无衬线字体完全解析

Poppins字体终极指南:免费开源的多语言几何无衬线字体完全解析 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 如果你正在寻找一款既现代又专业的免费字体&#xff…...

离散流匹配与MaskFlow框架:视频生成技术解析

1. 离散流匹配在视频生成中的技术演进 视频生成技术近年来取得了显著进展,但长视频生成仍然面临两大核心挑战:一是如何有效建模视频中复杂的时空动态关系,二是如何在有限的计算资源下实现高效生成。传统方法通常采用固定长度的训练序列&…...

【2026社工】初级社会工作者历年真题及答案PDF电子版(2010-2025年)

2026年初级社会工作者职业水平考试安排 考试时间: 2026年5月23日 考试科目与形式 科目名称考试形式社会工作实务闭卷笔试社会工作综合能力闭卷笔试 备考资源说明 提供2010-2025年完整历年真题及解析,覆盖全部考试科目,具体功能如下&#…...