libevent数据结构——TAILQ_结构体

news2024/12/23 7:08:47

TAILQ_结构体

TAILQ_结构体在文件event2/event_struct.h和文件event2/keyvalq_struct.h中都有定义,并且他们的定义都是一样的,定义了TAILQ_ENTRY、TAILQ_HEAD结构体:

#ifndef TAILQ_ENTRY
#define EVENT_DEFINED_TQENTRY_
#define TAILQ_ENTRY(type)						\
struct {								\
	struct type *tqe_next;	/* next element */			\
	struct type **tqe_prev;	/* address of previous next element */	\
}
#endif /* !TAILQ_ENTRY */

#ifndef TAILQ_HEAD
#define EVENT_DEFINED_TQHEAD_
#define TAILQ_HEAD(name, type)			\
struct name {					\
	struct type *tqh_first;			\
	struct type **tqh_last;			\
}
#endif

同时,我们还发现在include 的同级目录下有一个compat/sys/queue.h中也定义了TAILQ_相关的结构体,并且还定义了一些相关的操作宏,这个放到以后说。

由这两个结构体配合构造出来的队列一般如下图所示:
img

图中,一级指针指向的是queue_entry_t这个结构体,即存储queue_entry_t这个结构体的地址值。二级指针存储的是一级地址变量的地址值。所以二级指针指向的是图中的一级指针,而非结构体。图中的1,2, 3为队列元素保存的一些值。

队列操作宏函数以及使用例子

这部分似乎只是在libevent内部使用(文件compat/sys/queue.hevent-internal.h中),并没有导出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM——10.对象的内存布局

这篇文章,我们来了解一下对象在内存中的布局是什么样的。 解释:前面有一篇文章我们讲了JVM中类的结构,那里讲的是一个java类,被编译成二进制字节码后,它的结构是什么样的,或者说按照jvm的标准,…

故障注入实验:了解如何使用Chaos Engineering的方法,在服务网格中进行故障注入实验

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Jenkins自动化部署前后端分离项目 (svn + Springboot + Vue + maven)有图详解

1. 准备工作 本文的前后端分离项目,技术框架是: Springboot Vue Maven SVN Redis Mysql Nginx JDK 所以首先需要安装以下: 在腾讯云服务器OpenCLoudOS系统中安装jdk(有图详解) 在腾讯云服务器OpenCLoudOS系统…

ElasticSearch+MongoDB:搜索-关键字联想

目标: 从长尾关键词挖掘站长工具智能改写 - 5118营销大数据中获得数据集 业务层 java Autowired MongoTemplate mongoTemplate; /*** 联想词* param userSearchDto* return*/ Override public ResponseResult findAssociate(UserSearchDto userSearchDto) {//1 参数…

JUC并发工具使用与详情(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)

JUC并发工具 一、CountDownLatch应用&源码分析 1.1 CountDownLatch介绍 CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器 如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了 需要一个并发安全的计数器来操…

大型语言模型:SBERT — 句子BERT

了解 siamese BERT 网络如何准确地将句子转换为嵌入 简介 Transformer 在 NLP 领域取得了进化性的进步,这已不是什么秘密。基于 Transformer,还发展出了许多其他机器学习模型。其中之一是 BERT,它主要由几个堆叠的 Transformer 编码器组成。除…

RabbitMQ生产故障问题分析

1. 问题引发 由某个服务BI-collector-xx队列出现阻塞,影响很整个rabbitMQ集群服务不可用,多个应用MQ生产者服务出现假死状态,系统影响面较广,业务影响很大。当时为了应急处理,恢复系统可用,运维相对粗暴的把…

使用Linkerd实现流量管理:学习如何使用Linkerd的路由规则来实现流量的动态控制

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

笔试面试相关记录(5)

(1)给定一个字符串,含有大写、小写字母,空格,数字,需要将其变为满足如下条件: 所有的数字需要换成空格,并且字符串的头尾不包含空格,且整个字符串不包含连续的两个空格。…

网络地址转换技术NAT以及路由器LAN口与WAN口的数据交换

NAT技术 网络地址转换(NAT)技术可以帮助局域网设备通过私有IP地址访问互联网。以下是NAT技术如何实现这一功能的基本原理: 私有IP地址:在一个局域网中,通常使用私有IP地址来为设备分配网络标识。私有IP地址范围包括以…

OT:数字设定框(QSpinBox:处理整数,QDoubleSpinBox:处理浮点数)

widget.h #ifndef WIDGET_H #define WIDGET_H //数字设定框 #include <QWidget> #include <QSpinBox> //处理整数 #include <QDoubleSpinBox> //处理浮点数class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Widget();private:…

RabbitMQ 消息应答

每日一句 物是人非事事休,欲语泪先流。 概述 为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制, 消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。 自动应答 消息发送后立即被认为已经传送成功,这种模式需要在…

I Pa?sWorD

2023icpc网络赛第一场 I 题意&#xff1a;题目给出只包含大小写字母&#xff0c;数字以及?的字符串&#xff0c;对于每一个小写字母&#xff0c;这一位字符既有可能是该小写字母&#xff0c;也有可能是该小写字母的对应大写字母&#xff0c;也就是该位的字符有两种可能&#x…

01. pring Cloud微服务系列之 包版本号约定

Spring Cloud微服务系列文章&#xff0c;点击上方合集↑ 1. Java8 目前市场上最常用的是Java8&#xff0c;而Java17则代表着未来的发展趋势。虽然Spring Boot 3已经发布&#xff0c;但它要求最低版本为Java17。然而&#xff0c;考虑到目前很多开发工具库还没有完全适配Java17…

批处理小程序的制作

一、介绍 批处理是一种将一系列计算机任务按照预定义的顺序进行自动化处理的技术。它是通过批处理脚本或命令文件来实现的&#xff0c;可以在不需要人工干预的情况下&#xff0c;批量运行多个命令或程序。 批处理脚本的优点 1. 自动化&#xff1a;批处理可以自动执行重复性任…

数据库----数据查询

1.6 查询语句 语法&#xff1a;select [选项] 列名 [from 表名] [where 条件] [group by 分组] [order by 排序][having 条件] [limit 限制]1.6.1 字段表达式 mysql> select 锄禾日当午; ------------ | 锄禾日当午 | ------------ | 锄禾日当午 | ---…

5个最好的乐高设计软件

如果你的目标是构建一个由数千个元素组成的乐高套装&#xff0c;你需要首先使用现有的最佳乐高设计软件进行规划。 通过使用本文中介绍的软件&#xff0c;你将学会创造性地思考并在不使用架构部件的情况下进行构建。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 乐高设…

最新AI创作系统+ChatGPT商业运营源码+支持GPT4.0+支持国内AI模型/支持AI绘画

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

多线程的学习上篇

座右铭: 天行健&#xff0c;君子以自强不息;地势坤&#xff0c;君子以厚德载物. 引入进程这个概念的目的 引入进程这个概念,最主要的目的,是为了解决“并发编程"这样的问题. 这是因为CPU进入了多核心的时代 要想进一步提高程序的执行速度,就需要充分的利用CPU 的多核资源…

部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…