FreeRTOS Mutex 具有相同优先级的多任务

FreeRTOS Mutex multiple task with same priority

我在使用 FreeRTOS 二进制互斥体时遇到了一些问题。在我的应用程序中,有多个具有相同优先级的线程(任务),其中两个访问文件 I/O 的函数在互斥量获取和互斥量释放中。

根据某些时间,一个任务正在使另一个任务处于饥饿状态。这可能吗?

FreeRTOS 考虑到任务等待资源的时间是多少?

谢谢

您是否在多个任务的紧密循环中使用互斥体?如果是这样,那么一个任务持有互斥量的时间可能比您想象的要长是合乎逻辑的。如果任务 A 和 B 具有相同的优先级,A 持有互斥量而 B 正在等待互斥量,那么当 A 交还互斥量时不会发生上下文切换,因为 B 具有与 A 相同的优先级(如果B 具有更高的优先级,但如果任务切换到同等优先级的任务,则会违反调度算法并冒任务抖动的风险)。在那里,如果 A 在一个循环中,将互斥锁还给它,然后立即再次获取它,每次 B 尝试获取互斥锁时,它都会发现 A 仍然持有互斥锁,因此,如果 B 也在一个循环中,它将阻塞再次在互斥锁上。这种情况很容易解决 - 但建议您阅读免费书籍中描述此问题的章节:http://www.freertos.org/Documentation/RTOS_book.html