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

山西网站建设方案公司360元网站建设 网络服务

山西网站建设方案公司,360元网站建设 网络服务,苏州规划建设局网站,小程序赚钱的方式信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…

信号量的简介

reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。

比如动车上的卫生间,一个卫生间同时只能容纳一个人,由指示灯来表示是否有人在使用。当我们想使用卫生间的时候,有如下过程:

1、判断卫生间是否有人使用(判断信号量是否有资源)

2、卫生间空闲(信号量有资源),那么就可以直接进入卫生间(获取信号量成功)

3、卫生间使用中(信号量没有资源),那么这个人可以选择不上卫生间(获取信号量失败),也可以在门口等待(任务阻塞)

信号量与队列的区别如下:

信号量

队列

主要用于管理对共享资源的访问,确保在同一时刻只有一个任务可以访问共享资源

用于任务之间的数据通信,通过在任务之间传递消息,实现信息的传递和同步。

可以是二进制信号量(Binary Semaphore)或计数信号量(Counting Semaphore)

存储和传递消息的数据结构,任务可以发送消息到队列,也可以从队列接收消息。

适用于对资源的互斥访问,控制任务的执行顺序,或者限制同时访问某一资源的任务数量。

适用于在任务之间传递数据,实现解耦和通信。

二值信号量 

二值信号量(Binary Semaphore)是一种特殊类型的信号量,它只有两个可能的值:0和1。这种信号量主要用于实现对共享资源的互斥访问或者任务之间的同步。

  • 两个状态: 二值信号量只能处于两个状态之一,通常用0和1表示。当信号量的值为0时,表示资源不可用;当值为1时,表示资源可用。
  • 互斥访问: 常用于控制对共享资源的互斥访问,确保在同一时刻只有一个任务可以访问共享资源。任务在访问资源之前会尝试获取信号量,成功则继续执行,失败则等待。
  • 任务同步: 也可以用于任务之间的同步,例如一个任务等待另一个任务完成某个操作。

信号量 API 函数允许指定阻塞时间。 阻塞时间表示当一个任务试图“获取”信号量时, 如果信号不是立即可用,那么该任务进入阻塞状态的最大 “tick” 数。 如果 多个任务在同一个信号量上阻塞,那么具有最高优先级的任务将在下次信号量可用时最先解除阻塞

可将二进制信号量视为仅能容纳一个项目的队列。 因此,队列只能为空或满(因此称为二值)。 使用队列的任务和中断 不在乎队列容纳的是什么——它们只想知道队列是空的还是满的。 可以 利用该机制来同步任务和中断。

二值信号量相关函数:

函数

描述

xSemaphoreCreateBinary()

使用动态方式创建二值信号量

xSemaphoreCreateBinaryStatic()

使用静态方式创建二值信号量

xSemaphoreGive()

释放信号量

xSemaphoreGiveFromISR()

在中断中释放信号量

xSemaphoreTake()

获取信号量

xSemaphoreTakeFromISR()

在中断中获取信号量

 计数型信号量

正如二进制信号量可以被认为是长度为 1 的队列那样,计数信号量也可以被认为是长度大于 1 的队列。 信号量的用户对存储在队列中的数据不感兴趣,他们只关心队列是否为空。

计数信号量通常用于两种情况:

1、事件计数:在此使用方案中,每次事件发生时,事件处理程序将“给出”一个信号量(信号量计数值递增) ,并且 处理程序任务每次处理事件(信号量计数值递减)时“获取”一个信号量。因此,计数值是 已发生的事件数与已处理的事件数之间的差值。在这种情况下, 创建信号量时计数值可以为零。

2、资源管理:在此使用情景中,计数值表示可用资源的数量。要获得对资源的控制权,任务必须首先获取 一个信号量——同时递减信号量计数值。当计数值达到零时,表示没有空闲资源可用。当任务使用完资源时, “返还”一个信号量——同时递增信号量计数值。在这种情况下, 创建信号量时计数值可以等于最大计数值。

计数型信号量相关函数:

函数

描述

xSemaphoreCreateCounting()

使用动态方法创建计数型信号量。

xSemaphoreCreateCountingStatic()

使用静态方法创建计数型信号量

uxSemaphoreGetCount()

获取信号量的计数值

优先级翻转简介 

优先级翻转是一个在实时系统中可能出现的问题,特别是在多任务环境中。该问题指的是一个较低优先级的任务阻塞了一个较高优先级任务的执行,从而导致高优先级任务无法及时完成。

典型的优先级翻转场景如下:

  • 任务A(高优先级):拥有高优先级,需要访问共享资源,比如一个关键数据结构。
  • 任务B(低优先级):拥有低优先级,目前正在访问该共享资源。
  • 任务C(中优先级):位于任务A和任务B之间,具有介于两者之间的优先级。

具体流程如下:

  1. 任务A开始执行,但由于任务B正在访问共享资源,任务A被阻塞等待。
  2. 任务C获得执行权,由于优先级高于任务B,它可以抢占任务B。
  3. 任务C执行完成后,任务B被解除阻塞,开始执行,完成后释放了共享资源。
  4. 任务A重新获取执行权,继续执行。

这个过程中,任务A因为资源被占用而被阻塞,而任务B却被中优先级的任务C抢占,导致任务B无法及时完成。这种情况称为优先级翻转,因为任务C的介入翻转了高优先级任务A的执行顺序。

互斥信号量 

互斥信号量是包含优先级继承机制的二进制信号量。二进制信号量能更好实现实现同步(任务间或任务与中断之间), 而互斥信号量有助于更好实现简单互斥(即相互排斥)。

优先级继承是一种解决实时系统中任务调度引起的优先级翻转问题的机制。在具体的任务调度中,当一个高优先级任务等待一个低优先级任务所持有的资源时,系统会提升低优先级任务的优先级,以避免高优先级任务长时间等待的情况。

优先级继承无法完全解决优先级翻转,只是在某些情况下将影响降至最低。

不能在中断中使用互斥信号量,原因如下:

  • 互斥信号量使用的优先级继承机制要求从任务中(而不是从中断中)获取和释放互斥信号量。
  • 中断无法保持阻塞来等待一个被互斥信号量保护的资源。

互斥信号量相关函数:

函数

描述

xSemaphoreCreateMutex()

使用动态方法创建互斥信号量。

xSemaphoreCreateMutexStatic()

使用静态方法创建互斥信号量。

互斥信号量的获取和释放函数与二值信号量的相应函数相似,但有一个重要的区别:互斥信号量不支持在中断服务程序中直接调用。注意,当创建互斥信号量时,系统会自动进行一次信号量的释放操作。

http://www.yayakq.cn/news/752005/

相关文章:

  • 电商网站开发面临的技术问题个人简历模板电子版
  • 义乌网站开发公司你认为的网络营销是什么
  • 招聘网站建设人员企业建站系统信息
  • 网站推广方法网站备案有什么好处理
  • 天津网站优化流程中国铁路建设工程招标网站
  • 建设银行网站官方网站网站设计素材模板
  • 蒙古文网站建设wordpress 百度 插件怎么用
  • 网站建设如何使图片翻转宁波发布最新通报
  • 网站建设需要条件全国工商信息查询
  • mui做的h5网站案例装饰设计资质等级标准
  • 网站建设设计制作上海做网站公司qinmoo
  • wordpress网站根目录做网站要给ftp密码吗
  • 知名的设计网站大鹏手机网站建设
  • dw做的网站成品画出网站开发项目流程图
  • 有谁知道知乎网站是谁做的查询个人公司注册公司
  • 广东网站制作多少钱做网站公司叫什么
  • 北京网站建设公司如何排版深入解析wordpress(原书第2版)
  • 域名查询站长之家电商网站备案流程
  • asp绿色简洁通用型企业网站源码发布网站建设需求的经验
  • 沈阳建网站公司网页广告怎么投放
  • 加强网站信息建设方案住房和城乡建设部网站注册进度
  • 八年级信技做网站显示电脑没有安装wordpress
  • 廊坊网络公司网站wordpress眉顶布局
  • 做瞹瞹嗳视频网站如何给网站挂黑链
  • 网站建设的大纲一个服务器可以备案几个网站
  • 西宁最好网站建设公司html登录页面代码
  • 站酷设计网站官网未上色文件长沙招聘网58同城
  • 外贸网站建设 公司价格娱乐彩票网站建设制作
  • 霸州 网络 网站建设湖北外贸网站设计制作
  • apache多网站配置wordpress获取title