计算机专业的小伙伴还记得这本书吧,以及这种结构-双向链表
VxWorks里也实现了这种数据结构: doubly linked list
这个双向链表可以用来高效的管理数据,在VxWorks的Kernel里,很多机制用到了它。VxWorks封装了以下函数,提供了比课本还丰富的接口
- lstInit() 初始化链表
- lstFree() 清空链表
- lstAdd() 在链表尾部添加节点
- lstInsert() 在特定位置添加节点
- lstDelete() 删除节点
- lstCount() 节点数量
- lstGet() 返回第一个节点,并将其从链表中删除
- lstFirst() 返回第一个节点
- lstLast() 返回最后一个节点
- lstPrevious() 返回前一个节点
- lstNext() 返回后一个节点
- lstNth() 返回第N个节点
- lstNStep() 返回与节点相距为N的节点
- lstFind() 返回节点在链表中的序号,从1开始
- lstConcat() 将第二个链表连接到第一个链表尾部,并清空第二个链表
- lstExtract() 将第一个链表中的部分节点移动到第二个链表
写个例子,把它们挨个调用一遍
跑一下,看看效果
用起来并不难,但有一点要注意:这个结构内部没有同步或互斥机制。多任务访问同一链表时,要注意互斥保护,例如使用"互斥信号量"
这正是:
基本结构双链表,管理数据效率高。
如若多人要共用,使用互斥来担保。