我正在研究航空电子操作系统(线程层),我正在寻找关于以下(简化)要求的最佳解决方案:“等待[各种对象]的线程按优先级顺序排队。对于相同的优先级,线程是也按 FIFO 顺序排队”。
[各种对象] 例如信号量。
我认为我可以使用经典链表构建这样的等待列表,这使得插入/排序相对快速和容易,并且完全符合预期的使用情况(一个线程一次进入等待状态)。但是我正在研究一个裸机目标并且我没有任何 libc 支持,因此我没有 malloc(这对于链表非常有用!)。
对于按优先级排序线程,我通常使用非常有效的二进制堆(http://en.wikipedia.org/wiki/Binary_heap),但这里不能使用它,因为不能以这种方式管理“FIFO 顺序”。
当然,我可以使用更经典的排序算法来做到这一点,但它们通常很耗时,即使是一次插入也是如此,因为每次插入时可能会移动很多数组元素。
所以我想知道是否存在合适的算法......也许是一种改进的二进制堆?......或者“静态”链表?......或者最好的东西是与链表相关的分配器算法?... .
有关信息: - 线程总数限制为 128,因此内存需求始终是有限的,并且可以在编译时知道/保留。- 我的数量或 RAM 有限,所以我几乎无法构建这样一个按 FIFO 上的优先级排序的二进制堆(自然按到达时间排序)......</p>
我真的很感激关于这个问题的任何想法和新的看法。
谢谢 !