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

软件开发培训机构怎么鉴定好坏广州网站seo

软件开发培训机构怎么鉴定好坏,广州网站seo,美客多电商平台入驻条件,施工企业会计分录文章目录 为什么需要互斥访问?使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问? 在裸机中,假设有两个函数(func_A, func_B)都要修改a的值(a),那么将a定义为全局变…

文章目录

    • 为什么需要互斥访问?
    • 使用队列实现互斥访问
      • 休眠和唤醒机制
      • 环形缓冲区


为什么需要互斥访问?

在裸机中,假设有两个函数(func_A, func_B)都要修改a的值(a++),那么将a定义为全局变量a=0,main函数调用func_A();func_B(); 此时a的值为2。因为不存在多任务执行,代码是按照顺序执行的。

在多任务系统中,多个任务在微观上是串行执行,宏观上是并行执行的。 假设两个任务(func_A, func_B)也都要修改a的值(a++),会有什么情况呢?
首先,将修改a的值的代码a++做个拆分:
1、从内存中将a的值读到寄存器R0中;
2、修改寄存器R0的值;
3、将寄存器R0的值写回内存a中。

第一个时间片段执行 func_A,执行完第一步(从内存中将a的值读到寄存器R0中,a=R0=0),任务切换要释放CPU使用权。(任务切换之前会将现场保存下来 R0=0)
第二个时间片段执行 func_B,期间将3个步骤都执行完(a=R0=0;R0=R0+1=0+1=1; R0=a=1)后,任务切换要释放CPU使用权。
第三个时间片段,func_A接着执行,之前先将现场恢复(R0=0),执行后面两个步骤(R0=R0+1=0+1=1; R0=a=1)

在这里插入图片描述
通过上面的两个任务细分执行的过程,会发现当多个任务共用操作一个变量时,会发生异常。为了避免这种异常,引入互斥访问变量的方式。

使用队列实现互斥访问

在这里插入图片描述
当有多个任务操作变a时,为了确保每个任务操作a期间不被其他任务所影响,就调用队列来做隔离,任务B要去读a的值时直接调用队列处理好的数据即可。
队列的任务:1、关闭中断;2、环形缓冲区(操作a的值);3、链表操作;4、打开中断

当任务A调用队列关闭中断后,其他任务不会再被调度执行(相当于逻辑程序),操作完变量a之后,打开中断,此时恢复CPU调度机制。使用队列可以实现互斥访问,避免多个任务同时操作一个变量时造成的异常现象。

RTOS中 调度队列函数接口 :写队列xQueueSend,读队列xQueueReceive

休眠和唤醒机制

任务在读队列的时候会出现两种情况:
第一种情况、读到队列中的值返回;
第二种情况、队列读不到值,将任务休眠

场景:只有两个任务A和任务B,读写a的值
第一个时间片段:任务A 运行,在这个时间段中还没有调用队列修改a的值;
第二个时间片段:任务B运行,读队列,没有得到a的值,将任务B休眠;
第三个时间片段 —— 第五个时间片段:由于任务B处于休眠状态,因此任务A全速运行
第六个时间片段:任务A 写队列修改a的 值,并唤醒任务B
第七个时间片段:任务B 继续执行。
在这里插入图片描述
因此使用队列的方式,不仅能实现互斥访问,还能使用休眠和唤醒机制让CPU更高效的运行。
(注:唤醒任务B,任务B是不会马上执行,要等到下一个tick中断)

写队列的动作:1、修改 Data值;2、唤醒任务wake up
怎么知道唤醒哪个任务呢?队列链表Queue.list,将需要唤醒的任务放在链表里。

读队列的动作:1、有Data值,返回;2、无Data,休眠;
休眠:1、将任务从ReadyList移动到DelayList;2、将任务记录到Queue.list队列链表。

环形缓冲区

在这里插入图片描述
缓冲区本质上就是数组,假设这个缓冲区的长度为8,写缓冲区指针w刚开始在0的位置,每写一个val,指针w位置+(1%8),以此类推,最后的w+(8%8)。这样就形成闭环,也就是环形缓冲区。(读操作也是一样的)

由于链表的大小是有限的,所以当任务写缓冲区的时候发现已经写满了,就会将任务放到Queue.list队列链表中的list for send 链表中
在任务在读缓冲区的值时没有读出来,会将任务放到Queue.list队列链表中的list for receive 链表中

http://www.hkea.cn/news/409083/

相关文章:

  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的
  • 万盛集团网站建设seo网站推广全程实例
  • 做教育的网站需要资质吗网站怎么开发
  • 微网站怎么做滚动中国万网域名注册官网
  • 个人如何免费建网站seo在线优化工具 si
  • 双线主机可以做彩票网站吗网络推广合作协议
  • 做外贸的b2b网站域名批量查询系统
  • 建设网站需要哪些职位网站建设策划书
  • 苏州网站建设哪里好网站点击排名优化
  • 网站建设收费标准策划百度推广关键词越多越好吗
  • 网站怎么做更新吗如何建立网页
  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品
  • 常用的网站类型有哪些seo优化专员编辑
  • 网站专题框架怎么做海阳seo排名
  • 手机网站代码下载黄页网站推广服务