【发布时间】:2017-05-12 11:31:01
【问题描述】:
我在使用 FreeRTOS 二进制互斥体时遇到了一些问题。在我的应用程序中,有多个具有相同优先级的线程(任务),其中两个访问互斥锁获取和互斥锁释放中的文件 I/O 函数。
根据某些时间安排,一项任务对另一项任务造成饥饿。这可能吗?
FreeRTOS 会考虑任务等待资源的时间?
谢谢
【问题讨论】:
-
为什么要在临界区进行文件 I/O?这听起来是个坏主意。
-
多线程安全。
-
还有其他方法可以保证线程安全。避免饥饿的最好方法是让你的互斥锁尽可能小:不要做任何需要超过几个 CPU 周期的事情,不要做任何可能阻塞调用者的事情(例如, 不要做文件 I/O)。保持 I/O 线程安全的最好方法是只让一个线程访问任何特定设备。我不知道您的程序与哪个存储设备通信,但它可能只有一个“端口”或“接口”,因此没有性能理由让多个线程与之通信。这只是您选择如何组织程序的问题。
-
您可以随时使用 taskYIELD 强制上下文切换。
标签: multithreading freertos stm32f4