我在使用FreeRTOS二进制互斥锁时遇到了一些问题。在我的应用程序中,有多个线程(任务)具有相同的优先级,其中两个访问文件I / O函数,这些函数位于互斥锁和互斥锁版本中。
根据某些时间,一项任务正在向另一项任务进行饥饿。这可能吗?
FreeRTOS会考虑等待资源的任务的时间是多少?
由于
答案 0 :(得分:3)
您是否在多个任务中使用紧密循环中的互斥锁?如果是这样,那么有一个逻辑上的原因可以解释为什么一个任务可能会使互斥锁的持续时间超过您的想象如果任务A和B具有相同的优先级,A持有互斥锁而B正在等待互斥锁,那么当A给予互斥锁时,上下文切换不会发生,因为B具有与A相同的优先级(它会如果B具有更高的优先级,则会发生这种情况,但如果任务切换发生在同等优先级的任务中,则会违反调度算法并冒险执行任务。在那里,如果A在一个循环中,给出互斥量,然后立即再次获取它,每次B尝试获取互斥量时它会发现A仍然持有互斥锁因此,如果B也在循环中,它将阻塞再次在互斥上。这种情况很容易解决 - 但建议您阅读免费提供的书中描述这一章的章节:http://www.freertos.org/Documentation/RTOS_book.html