前言
前几篇文章一直在围绕FreeRTOS中的任务创建,删除,优先级,调度算法进行讲解,那么从本篇文章开始将围绕同步与互斥来展开讲解。
一、同步与互斥概念
当多个任务或线程共享资源并发执行时,同步和互斥是两个关键的概念。
1.同步(Synchronization) 是指协调多个任务或线程的执行顺序和相互之间的行为,以确保它们按照一定的顺序、时机和约束进行执行。同步的目的是保证任务或线程之间的有序交互,使它们能够按照预期的顺序完成各自的操作或实现特定的约束条件。常见的同步场景包括等待其他任务完成、等待某个条件满足、协调任务之间的依赖关系等。
2.互斥(Mutual Exclusion) 是指限制共享资源在任何时刻只能被一个任务或线程访问的机制。当多个任务或线程需要访问共享资源时,互斥机制用于确保只有一个任务或线程可以进入临界区(即代码区段),并对共享资源进行操作。互斥的目的是避免竞争条件,保证共享资源的访问互不干扰,从而避免数据不一致性和冲突。
二、在FreeRTOS中如何实现同步和互斥
同步:
任务通信机制: FreeRTOS 提供了多种任务通信机制,如队列(Queue)、信号量(Semaphore)、事件组(Event Group)等,用于在任务之间进行同步和通信。这些通信机制可以实现任务的等待和唤醒,以及数据传递和共享。
队列(Queue): 任务可以通过队列在彼此之间发送消息或数据。任务可以阻塞等待队列中的消息,并在消息到达时