1

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

根据某些时间安排,一项任务正在使另一项任务挨饿。那可能吗?

FreeRTOS 会考虑任务等待资源的时间?

谢谢

4

1 回答 1

3

您是否在多个任务的紧密循环中使用互斥锁?如果是这样,那么一个任务可能持有互斥锁的时间比您想象的要长,这是有逻辑的原因。如果任务 A 和 B 具有相同的优先级,A 持有互斥锁而 B 正在等待互斥锁,那么当 A 将互斥锁归还时不会发生上下文切换,因为 B 与 A 具有相同的优先级(如果B 具有更高的优先级,但如果任务切换到同等优先级的任务,则会违反调度算法并有任务颠簸的风险)。在那里,如果 A 处于循环中,则将互斥锁返回,然后立即再次获取,每次 B 尝试获取互斥锁时,它会发现 A 仍然持有互斥锁,因此,如果 B 也在循环中,它将阻塞再次在互斥锁上。 http://www.freertos.org/Documentation/RTOS_book.html

于 2017-05-13T01:35:35.740 回答