TinyWebServer阅读笔记(二)

这篇博客主要介绍了TinyWebServer中异步日志的实现,包括一个阻塞队列模块。阻塞队列包含队列大小、元素个数、队列头和尾等属性,以及加锁、解锁、判断队列状态、元素进出队列的方法。同时讨论了条件变量、互斥锁的作用,以及gettimeofday和pthread_cond_timedwait函数在时间处理上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有错误麻烦大佬指出!!!拜托了!!!!

异步日志实现:

主要包含两个部分: 1. 日志模块 2.阻塞队列模块,其中加入阻塞队列模块主要是解决异步写入日志做准备.

阻塞队列模块:

实现了一个模板类循环队列

        block_queue(int max_size = 1000)

//根据max_size的大小对循环队列进行构造,这个里面主要有以下几个属性:

        1. m_max_size: 循环队列能容纳的最大元素个数

        2. m_array: 具体的循环队列,是个指针,根据max_size用new来创建new T[max_size]

        3. m_size: 用来记录当前队列中存在的元素个数

        4. m_front: 队列的头

        5. m_back: 队列的尾

        6. 互斥锁: 用动态方式进行初始化 m_mutex

        7. 条件变量: 用动态方式进行初始化 m_cond

clear(): 清空循环队列,每次清空前对循环队列加锁,防止其他线程对其大小进行改变。

~block_queue(): 析构函数,首先利用锁对循环队列进行delete,之后delete掉互斥锁和条件变量。

full(): 判断队列是否满,判断前进行加锁,判断返回前解锁,如果m_size >= m_max_size就是满了。

empty(): 判断队列是否为空。如果m_size == 0则为空。

front(T &value): 队首元素,返回是否有队首元素,形参来进行值传递。

back(T &value): 队尾元素,返回是否有队尾元素,形参值传递。

size(): 返回当前队列中元素个数。

max_size(): 返回当前队列所能存在的最大元素个数。

push(const T &item): 往队列中添加元素,如果队已经满了就设置条件变量唤醒线程返回push失败,否则就将这个元素添加进队列中,并唤醒线程返回true。

pop(T &item): 元素出队列,如果没有元素就会循环等待条件变量返回false,否则就将出队并返回true。

pop(T &item, int ms_timeout): 重载的pop出队,增加了超时处理

问题:

        1. 条件变量和互斥锁?互斥锁与条件变量详解_lwz-qq的博客-优快云博客_条件变量和互斥锁

                总结:条件变量就是让线程在某一个条件到达后被唤醒,就是从一个线程等待到唤醒的改变,条件变量通常和互斥锁相结合使用。

        2. gettimeofday?C语言gettimeofday()函数:获取当前时间_C语言中文网 (biancheng.net)

                总结:获取当前时间

        3. pthread_cond_timedwait?pthread_cond_timedwait函数使用_霍宏鹏的博客-优快云博客_pthread_cond_timedwait

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值