首页
学习
活动
专区
圈层
工具
发布

技术总结|tailq详解

tailq介绍 TAILQ是linux内核对双向队列操作的一种抽象,能实现操作队列需要的各种操作:插入元素,删除元素,遍历队列等,其封装是对应的宏定义,下面详细说明tailq的操作,从定义,初始化...tailq的宏定义API (1)定义:TAILQ_ENTRY(type) 初始化一个type类型的entry #define TAILQ_ENTRY(type) \ struct {...(head) 初始化头部,其中head是上面的TAILQ_HEAD #define TAILQ_INIT(head) do { \ TAILQ_FIRST...(5)删除:TAILQ_REMOVE(head, elm, field) head是TAILQ_HEAD的头部,elm是对应需要处理的节点,field就是对应上面的TAILQ_ENTRY #define...(6)遍历:TAILQ_FOREACH(var, head, field) var是临时变量,head对应TAILQ_HEAD的定义,field对应TAILQ_ENTRY #define TAILQ_FOREACH

1.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Librdkafka的基础数据结构 1 --- 队列

    (name, type) _TAILQ_HEAD(name, struct type,): #define _TAILQ_HEAD(name, type, qual)...(type) _TAILQ_ENTRY(struct type,) 实际是用最少侵入式的方式实现了一个类似于C++的模板的机制, 定义中的type就是队列里元素的类型, 可以是任意struct类型, 这个..._TAILQ_ENTRY(type, qual)放在这个struct类型的定义里,是其的一个成员, 然后各个元素通过这个TAILQ_ENTRY成员彼此串联起来, 松耦合在一起 #define _TAILQ_ENTRY...tqh_last)) 要理解这个其实关键一点是上面定义的TAILQ_HEAD和TAILQ_ENTRY在结构和内存布局上是一样一样的....(head)->tqh_last)是最后一个元素的next指针的地址, 因为TAILQ_ENTRY(type)这个定义是没有类型名的,我们不能直接cast成 TAILQ_ENTRY(type)类型, 所有就只能

    62420
    领券