天津做网站优化哪家好/百度投流
目录
说明:
一、信号量
1.1、信号量简介
1.2、信号量特点
二、二值信号量
2.1、二值信号量简介
2.2、获取与释放二值信号量函数
2.3、二值信号量使用过程与相关API函数
2.4、创建二值信号量函数了解
2.5、释放二值信号量了解
2.6、获取二值信号量了解
三、计数型信号量
3.1、计数型信号量简介
3.2、计数型信号量适用场合
3.3、创建计数型信号量函数
3.4、获取信号量当前数值大小函数
3.5、计数型信号量释放与获取
四、优先级翻转
4.1、什么是优先级翻转
4.2、优先级翻转出现原因
4.3、解决优先级翻转
五、互斥信号量
5.1、什么是互斥信号量
5.2、什么是优先级继承
说明:
关于内容:
1)以下内容多为概念了解与步骤分析
2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码
3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试
关于其它:
1)操作系统:win 10
2)平台:keil 5 mdk
3)语言:c语言
4)板子:STM32系列移植FreeRTOS
一、信号量
1.1、信号量简介
1)信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。
2)信号量资源数表示共享资源的数量(称为计数值,计数值大于0表示有信号量资源)
3)释放信号量表示让出共享资源,计数值+1(因为共享资源空位多了)
4)获取信号量表示占用共享资源,计数值-1(因为共享资源空位少了)
5)信号量的计算值有限制:限定最大值,当限定最大值为1-->它就是二值信号量;让最大值不是1-->它就是计数型信号量
1.2、信号量特点
1)仅存放计数值,无法存放其它数据;创建信号量,只需分配信号量结构体
2)释放信号量时,不可阻塞,计数值+1,当计数值最大值时,返回失败
3)获取信号量,计数值-1,当没有资源时,可以阻塞
二、二值信号量
2.1、二值信号量简介
1)二值信号量本质是一个队列长度为1的队列,故该队列只存在空或满两种情况,这就是二值的意思
2)二值信号量通常用于互斥访问或任务同步,与互斥信号量相似,但二值信号量可能导致优先级翻转问题,故二值信号量多用于任务同步
2.2、获取与释放二值信号量函数
1)释放二值信号量函数:xSemaphoreGive(任务中),xSemaphoreGiveFromISR(中断中)
2)获取二值信号量函数:xSemaphoreTake(任务中),xSemaphoreTakeFromISR(中断中)
3)Give相当于把标志置“满”-->相当于1,Take相当于把标志置“空”-->相当于0
2.3、二值信号量使用过程与相关API函数
1)首先创建二值信号量-->释放二值信号量-->获取二值信号
2)相关API函数,如下图1:
图1
2.4、创建二值信号量函数了解
函数名称:SemaphoreHandle_t xSemaphoreCreateBinary(void)
或使用创建队列函数,代入不同参数即可,如下图2:
图2
返回值:
返回值为,NULL,表示:创建失败
返回值为,其他值,表示:创建成功返回二值信号的句柄
2.5、释放二值信号量了解
函数名称:BaseType_t xSemaphoreGive(xSemaphore)
参数:
xSemaphore,含义:要获取的信号量句柄
2.6、获取二值信号量了解
函数名称:BaseType_t xSemaphoreTake( xSemaphore,xBlockTime)
参数:
xSemaphore,含义:要获取的信号量句柄
xBlockTime,含义:阻塞时间
返回值:
pdTRUE,含义:获取信号量成功
pdFALSE,含义:超时,获取信号量失败
三、计数型信号量
3.1、计数型信号量简介
计数型信号量相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这在计数型信号量被创建的时候确定的。
3.2、计数型信号量适用场合
1)事件计数:当每次事件发生后,在事件处理函数释放计数型信号量(计数值+1),其他任务会获取计数型信号量(计数值-1),这种场合一般在创建时将初始值设置为0;
2)资源管理:信号量表示有效的资源数目,任务必须先获取信号量(信号量计数值-1),才能获得资源控制权,当计数值为0时表示没有可用资源,当任务使用完资源后,必须释放信号量(计数值+1)。信号量创建时计数值应大于最大资源数目。
3.3、创建计数型信号量函数
函数名称:xSemaphoreCreateCounting(uxMaxCount, uxlnitalCount)
3.4、获取信号量当前数值大小函数
函数名称:xSemaphoreGetCount(xSemaphore)
3.5、计数型信号量释放与获取
同二值信号量,不在说明。
四、优先级翻转
4.1、什么是优先级翻转
高优先级的任务反而慢执行,低优先级的任务先执行。优先级翻转在强占式内核中是很常见的,但在实时操作系统中是不允许被出现优先级翻转的,因为优先级翻转会破坏任务的预期允许顺序,可能导致未知的严重后果。
4.2、优先级翻转出现原因
1)假设存在三个任务A,B,C,任务A优先级最高(在ABC任务中,下同),任务B优先级中间,任务C优先级最低;任务A和任务C都是对二值信号量进行申请的;任务B执行其他功能(例如打印信息)
2)任务C先被创建,故C先运行(此时任务A刚刚就绪,此时任务B未就绪),任务A也申请二值信号量,但此时任务C已占用,任务A申请不到,只能被阻塞进行等待;此时任务B就绪了,因为任务B不申请二值信号量,且优先级高于任务C,所以任务B抢占了任务C;此时就会出现,任务A优先级>任务B优先级,但任务B却先运行的情况;
3)高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。从现象看,就像是中优先级的任务比高优先级任务具有更高的优先级。
4.3、解决优先级翻转
1)优先级继承(互斥信号量)
2)优先级天花板
五、互斥信号量
5.1、什么是互斥信号量
互斥信号量其实就是一个拥有优先级继承二值信号量,在同步的应用中二值信号量最合适。互斥信号量适用于那些需要互斥访问的应用中。
5.2、什么是优先级继承
当一个互斥信号量正在被一个低优先级的任务持有时,如果此时有个高优先级的任务也尝试获取这个互斥信号量,那么这个高优先级的任务就会被阻塞。不过这个高优先级的任务将会将优先级的提升到与自己相同的优先级。
注意点:
1)互斥信号量不能用于中断服务函数中,原因:1、互斥信号量有任务优先级继承的机制,但是中断不是任务,没有任务优先级,所以互斥信号量只能用于任务中,不能用于中断服务函数中;2、中断服务函数不能因为要等待互斥信号量而设置阻塞时间进入阻塞态
2)创建互斥信号量时,会主动释放一次信号量。
相关文章:

FreeRTOS信号量 | FreeRTOS十
目录 说明: 一、信号量 1.1、信号量简介 1.2、信号量特点 二、二值信号量 2.1、二值信号量简介 2.2、获取与释放二值信号量函数 2.3、二值信号量使用过程与相关API函数 2.4、创建二值信号量函数了解 2.5、释放二值信号量了解 2.6、获取二值信号量了解 三…...

【SpringBoot】SpringBoot常用注解
一、前言首先这里说的SpringBoot常用注解是指在我们开发项目过程中,我们经常使用的注解,包含Spring、SpringBoot、SpringCloud、SpringMVC等这些框架中的注解,而不仅仅是SpringBoot中的注解。这里只是作一个注解列举,每个注解具体…...

数据一致性
目录一、AOP 动态代理切入方法(1) Aspect Oriented Programming(2) 切入点表达式二、SpringBoot 项目扫描类(1) ResourceLoader 扫描类(2) Map 的 computeIfAbsent 方法(3) 反射几个常用 api① 创建一个测试注解② 创建测试 PO 类③ 反射 api 获取指定类的指定注解信息(4) 返回…...

Docker不做虚拟化内核,对.NET有什么影响?
引子前两天刷抖音,看见了这样一个问题。问题:容器化不做虚拟内核,会有什么弊端?Java很多方法会跟CPU的核数有关,这个时候调用系统函数,读到的是宿主机信息,而不是我们限制资源的大小。思考&…...

HTML总结
CSS代码风格 空格规范: 1. 属性值前面,冒号后面,保留一个空格; 2. 选择器(标签)和大括号中间保留空格。 基本语法概述: 1.HTML标签是由尖括号包围的关键词,如<html> 2.HTM…...

ByteHouse:基于ClickHouse的实时数仓能力升级解读
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 ByteHouse是火山引擎上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离线分析。便捷的弹性扩缩容能力&…...

[SSD固态硬盘技术 15] FTL映射表的神秘面纱
为什么需要映射表?固态硬盘的存储器件采用的是闪存[5],具有以下几个特点: (1)读写基本单位是以页(Page)为单位,擦除是以块(Block)为单位。...

浅析依赖注入框架的生命周期(以 InversifyJS 为例)
在上一篇介绍了 VSCode 的依赖注入设计,并且实现了一个简单的 IOC 框架。但是距离成为一个生产环境可用的框架还差的很远。 行业内已经有许多非常优秀的开源 IOC 框架,它们划分了更为清晰地模块来应对复杂情况下依赖注入运行的正确性。 这里我将以 Inv…...

HER2靶向药物研发进展-销售数据-上市药品前景分析
HER2长期作为肿瘤领域的热门靶点之一,其原因是它在多部位、多种形式的癌症中均有异常的表达,据研究表明HER2除了在胃癌、胆道癌、胆管癌、乳腺癌、卵巢癌、结肠癌、膀胱癌、肺癌、子宫颈癌、子宫浆液性子宫内膜癌、头颈癌、食道癌中的异常表达还存在于多…...

【第38天】不同路径数问题 | 网格 dp 入门
本文已收录于专栏🌸《Java入门一百例》🌸学习指引序、专栏前言一、网格模型二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、【例题2】1、题目描述2、解题思路3、模板代码4、代码解析5.原题链接三、推荐专栏四、课后习题序、专…...

LINUX之链接命令
链接命令学习目标能够说出软链接的创建方式能够说出硬链接的创建方式1. 链接命令的介绍链接命令是创建链接文件,链接文件分为:软链接硬链接命令说明ln -s创建软链接ln创建硬链接2. 软链接类似于Windows下的快捷方式,当一个源文件的目录层级比较深&#x…...

1628_MIT 6.828 xv6_chapter0操作系统接口
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这本书最初看名字以为是对早期unix的一个解读,但是看了开篇发现 不完全是,只是针对JOS教学OS系统来做的一些讲解。 Xv6是对UNIX v6的重新实…...

使用 Sahi 实现 Web 自动化测试
Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具。Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素。Sahi 支持 HTTPS 并且独立于 Web 站点,简单小巧却功能强大。它相对于 Selenium 等自动化测试工具…...

天津菲图尼克科技携洁净及无菌防护服解决方案与您相约2023生物发酵展
BIO CHINA 生物发酵产业一年一度行业盛会,由中国生物发酵产业协会主办,上海信世展览服务有限公司承办,2023第10届国际生物发酵产品与技术装备展览会(济南)于2023年3月30-4月1日在山东国际会展中心(济南市槐…...

Java 网络编程详解
1、什么是网络编程 在网络通信协议下,不同计算机上运行的程序,可以进行数据传输。 应用场景: 1、即时通信 2、网游对战 3、邮件等等 Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序 2、网络编程三要素 2.1 IP地址 要…...

Scratch少儿编程案例-几何形式贪吃蛇
专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

一定要收藏的面试思维导图,粉丝分享面试经验
一位粉丝分享面试经验:1.常见面试题有哪些?主要从以下一些知识点做了准备: 常用的分析方法、Excel、SQL、 A/B测试、产品分析。然后每份面试针对职位要求,还有前期和HR聊天一点点了解这个职位之后,定向准备。 Excel、S…...

【博客615】通过systemd设置cgroup来限制服务资源争抢
通过systemd设置cgroup来限制服务资源争抢 1、场景 我们的宿主机上通常会用systemctl来管理一些agent服务,此时我们需要限制服务的cpu,memory等资源用量,以防止服务之前互相争抢资源,导致某些核心agent运行异常 2、systemd与cgro…...

C语言经典编程题100例(21-40)
21、练习3-2 计算符号函数的值对于任一整数n,符号函数sign(n)的定义如下:请编写程序计算该函数对任一输入整数的值。输入格式:输入在一行中给出整数n。输出格式:在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。输入样例1:10输出样例1:sig…...

Rabbitmq业务难点
Rabbitmq业务难点1.消息生产者发送的消息无法路由到任何一个队列怎么处理?2.聊聊Rabbitmq的七种工作模式3.Rabbitmq的消息确认机制4.Rabbitmq的消息持久化5.发布确认模式如何确保生产者能够成功将消息投递到消息队列6. Rabbitmq基于队列设置消息过期时间和单独针对消息设置过期…...

服务器如何下载百度网盘文件?Linux服务器如何在百度网盘中连接、上传下载;在Linux服务器上下载百度云盘中的资料
前言 百度云提供Python包bypy进行远程服务器的对接然后下载: https://github.com/houtianze/bypy 可以通过pip直接下载,授权本人的百度云账号后,就可以直接使Linux电脑本地文件与百度网盘的apps(我的应用数据)/bypy目…...

Cesium-数字仿真-你总要了解
Cesium(专注于时空数据的实时可视化) cesium是一款三维地球开源框架(可以多平台、跨平台使用)cesium隶属于美国AGI公司(Analytical Graphics Incorporation),美国通用公司宇航部的工程师创始开源 周边产…...

原型、原型链、__proto__与prototype的区别、继承
一.什么是原型与原型链 根据MDN官方解释: JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象[[Prototype]] ,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类…...

前端 面经
1说一说cookie sessionStorage localStorage 区别?解题思路得分点 数据存储位置、生命周期、存储大小、写入方式、数据共享、发送请求时是否携带、应用场景 标准回答 Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储。 它们的共同点:都是存储…...

[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置
RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色\33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5总共 6 级 想用 精确RGB值 真实地 大红色画个 大红桃心 ♥️ 有可能吗??🤔 rgb 模式 关于 RGB 模式…...

实战项目-用户评论数据情绪分析
目录1、基于词典的方法2、基于词袋或 Word2Vec 的方法2.1 词袋模型2.2 Word2Vec3、案例:用户评论情绪分析3.1 数据读取3.2 语料库分词处理3.3 Word2Vec 处理3.4 训练情绪分类模型3.5 对评论数据进行情绪判断目的:去判断一段文本、评论的情绪偏向在这里&a…...

day02 DOS(续)文本编辑快捷键 发展史
day02课堂笔记 1、常用的DOS命令(续) 1.1、del命令,删除一个或者多个文件 删除T1.class文件 C:\Users\Administrator>del T1.class 删除所有.class结尾的文件,支持模糊匹配 C:\Users\Administrator>del *.class T1.classT1…...

arm64与aarch64
结论: 目前arm64和aarch64概念已合并,新版64位arm程序统称aarch64. 问题引入: 存在部分机器,安装arm版本ss,会报错,提示 rootlocalhost ~]# rpm -ivh senseshiel50 59130arm64.rpm Verifying... ########…...

QString详解
QString存储16位Qchar(Unicode)字符串 QString使用隐式共享(copy-on-write)来提高性能。 什么是Unicode? unicode是一种国际标准,支持当今使用的大多数操作系统,他是US-ASCII和Latin-1的超集(与子集相同字符编码相同…...

SpringCloud微服务
一、微服务架构 1.1、单体应用架构 将项目所有模块(功能)打成jar或者war,然后部署一个进程 优点: 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开…...