【RTOS】快速体验FreeRTOS所有常用API(3)同步与互斥

快速体验FreeRTOS所有常用API(1)工程创建
快速体验FreeRTOS所有常用API(2)任务管理
快速体验FreeRTOS所有常用API(3)同步与互斥
快速体验FreeRTOS所有常用API(4)队列
快速体验FreeRTOS所有常用API(5)信号量、互斥量
快速体验FreeRTOS所有常用API(6)事件组
快速体验FreeRTOS所有常用API(7)任务通知
快速体验FreeRTOS所有常用API(8)软件定时器
快速体验FreeRTOS所有常用API(9)中断管理
快速体验FreeRTOS所有常用API(10)资源管理
快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

三、同步和互斥

3.1 同步(Sync)

  • 定义: 同步是一种协调多个线程或进程之间执行顺序的机制。它确保在多个并发实体之间按照预定的顺序执行操作,以避免不确定的行为。
  • 目的: 防止因为执行顺序不确定而导致的问题。
  • 实现方式: 同步机制包括使用信号量(Semaphores)、事件组(event group)、任务通知(task notification)等。

3.2 互斥(Mutex)

  • 定义: 互斥是一种用于控制对共享资源访问的机制。它确保在任何时刻只有一个线程或进程能够访问共享资源,从而避免竞态条件。
  • 目的: 防止多个线程或进程同时修改共享资源,保护共享资源的一致性。
  • 实现方式: 互斥锁是常见的互斥机制,通过在关键部分代码前后加锁和解锁来实现。在访问共享资源时,一个线程获得互斥锁,其他线程需要等待锁释放才能访问。

3.3 总结

  • 队列(queue)、信号量(semaphoe)、互斥量(mutex)、事件组(event group)、任务通知(task notification),都能实现同步、互斥。总结括它们的联系、区别以及在使用时的如何选择。
1)需要记忆的一些浓缩点:

1 队列

用途数据传递

重要参数:长度、数据类型

常见操作:写队列、读队列

2 信号量

用途资源计数

重要参数:计数值

常见操作:获取信号量、释放信号量

3 互斥量

用途互斥(共享资源保护)

重要参数:无

常见操作:获取互斥量、释放互斥量

4 事件组

用途多事件同步

重要参数:事件位

常见操作:设置事件、等待事件

5 任务通知

用途轻量级通信

重要参数:无

常见操作:发送通知、等待通知

2)对比
内核机制生产者消费者传送的内容用途
队列All TaskAll Task数据数据传输
信号量All TaskAll Task状态资源计数
互斥量当前任务当前任务状态资源保护
事件组All TaskAll Task状态多事件同步
任务通知All Task当前任务状态/数据轻量级通信

1 用途不同:

  • 队列: 用于任务之间的数据传递。
  • 信号量: 用于控制对共享资源的访问,限制访问数量。
  • 互斥量: 用于确保在任何时刻只有一个线程能够访问共享资源。
  • 事件组: 用于更复杂的同步和通信需求,涉及多个事件状态。
  • 任务通知: 用于实现轻量级的任务间通信,例如唤醒任务等。

2 内容传送:

  • 队列: 可以传送各种数据类型。
  • 信号量、互斥量、事件组、任务通知: 主要用于控制和通知,本身不传送数据。

3 阻塞机制:

  • 队列: 队列满时生产者阻塞,队列空时消费者阻塞。
  • 信号量、互斥量、事件组、任务通知: 都支持阻塞和非阻塞操作。
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值