当前位置: 首页 > 工具软件 > TinyWeb > 使用案例 >

TinyWebServer阅读笔记(二)

能正青
2023-12-01

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

异步日志实现:

主要包含两个部分: 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的博客-CSDN博客_条件变量和互斥锁

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

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

                总结:获取当前时间

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

 类似资料: