FreeRTOS笔记—第四章 同步互斥与通信

        把多任务系统当做一个团队,每一个任务相当团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念,都可以在现实生活中找到例子。

        各类RTOS都会涉及这些概念:任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)等。

4.1 同步与互斥的概念

这两个概念比较容易混淆,这里用通俗的举例解释。

同步:任务之间的依赖,比如A任务的运行依赖于B任务产生的数据。例如:在团队活动里,同事A写完报表,经理B才能拿去向领导汇报。经理B必须等同事A完成报表,AB之间有依赖。

互斥:对资源同时访问时,只能有一个获得资源,一个使用完后才能轮到下一个,往往需要进行互斥访问。例如:打印机同一时间内只能打印一个任务;A、B两人抢厕所,A先一步占用了,B只能等A用完再用。
 

4.2 实现同步、互斥的内核方法 对比

        能实现同步、互斥的内核方法有:任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)。

它们都有类似的操作方法:获取/释放、阻塞/唤醒、超时。

内核对象生产者消费者数据/状态说明
队列ALLALL里面 可以放任意多个数据;
任务、ISR都可以放入(生产)数据;
任务、ISR都可以读出(消费)数据;
用来传递数据,
发送者、接收者无限制,
一个数据只能唤醒一个接收者
事件组ALLALL

一个事件用一bit表示:

      1表示事件发生了,

      0表示事件没发生;
谁都可以设置(生产)多个位;
谁都可以等待(消费)多个位;

用来传递事件,
可以是N个事件,
发送者、接受者无限制,
可以唤醒多个接收者:像广播
信号量ALLALL核心是"计数"
任务、ISR释放信号量时,让计数加1;
任务、ISR获得信号量时,让计数减1;

用来维持资源的个数,
生产者、消费者无限制,
1个资源只能唤醒1个接收者:

像停车场,出来一个,才能进去一个

任务通知ALL只有我数据、状态都可以传输,核心是任务的TCB里的数值,会被覆盖;
发通知给谁?必须指定接收任务;
只能由接收任务本身获取该通知;
N对1的关系:
发送者无限制,
接收者只能是这个任务
互斥量A上锁A开锁数值只有0或1
我上锁:1变为0,
只能由我开锁:0变为1
就像一个空厕所,
谁使用谁上锁,
也只能由他开锁

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值