![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习muduo库
我叫龙傲天
相信微末的力量
展开
-
学习muduo库(15)之socket类
UML:解释:从逻辑上讲这个类封装的很简单,只有一个私有变量,就是文件描述符,剩下的所有的方法,都是围绕文件描述符来展开的,而且上一篇博客中提到的sochetops.h中的所有函数都是全局函数,而这些全局函数也是在socket类中调用的。...原创 2020-01-09 10:49:00 · 193 阅读 · 0 评论 -
学习muduo库(14)之网络编程相关的系统函数SocketsOps.h
SocketsOps.h在这个头文件中将网络相关的系统函数进行了进一步的封装,这里的函数也都是全局函数。int socket(int domain, int type, int protocol);•domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET(IPv4)、AF_INET6(IPv6)、AF_LOCAL(或称AF_UNIX,Unix域soc...原创 2020-01-04 15:00:53 · 285 阅读 · 0 评论 -
学习muduo库(14)之eventloopthread类
UML:解释;这个类体现了muduo库的思想:每一个线程有且有一个eventloop对象。此类的功能也是,创建一个线程,并在线程的回调函数中创造一个eventloop对象。值得学习的细节:EventLoop* EventLoopThread::startLoop(){ assert(!thread_.started()); thread_.start(); ...原创 2020-01-02 21:16:51 · 426 阅读 · 0 评论 -
学习muduo库(13)之evenloop类中wakeup()的概念
预备知识:eventfdeventfd是Linux 2.6提供的一种系统调用,它可以用来实现事件通知。eventfd包含一个由内核维护的64位无符号整型计数器,创建eventfd时会返回一个文件描述符,进程可以通过对这个文件描述符进行read/write来读取/改变计数器的值,从而实现进程间通信。#include <sys/eventfd.h>int eventfd...原创 2020-01-02 10:19:18 · 821 阅读 · 0 评论 -
学习muduo库(12)之定时器相关的类TimerQueue
准备知识:int timer_create(int clockid,int flags);//成功返回0参数:clockid:第一个参数一般为CLOCK_REALTIME或者CLOCK_MONOTONIC,其参数意义为参数意义CLOCK_REALTIME:相对时间,从1970.1.1到目前时间,之所以说其为相对时间,是因为我们只要改变当前系统的时间,从1970.1.1...原创 2019-12-31 09:44:56 · 269 阅读 · 1 评论 -
学习muduo库(11)之eventpoll类
预备知识:poll:int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数:fds:这是一个结构体数组指针。nfds:是这个数组的大小。timeout:表示poll的阻塞时间。typedef struct pollfd { int fd; /* 需要被检测或选择的文件描述符...原创 2019-12-27 15:58:23 · 337 阅读 · 0 评论 -
学习muduo库(10)之与日志相关的类
准备知识:标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。__LINE__ 当前程序行的行号,表示为十进制整型常量__FILE__ 当前源文件名,表示字符串型常量另外gcc还支持__func__,和__FUNCTION__,它指示所在的函数,但是这个关键字不被windows下的v...原创 2019-12-26 11:24:05 · 185 阅读 · 0 评论 -
学习muduo库(9)之线程单例类ThreadLocalSingleton
准备知识:__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。__thread使用规则: 只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy...原创 2019-12-20 19:06:08 · 438 阅读 · 0 评论 -
学习muduo库(8)之线程本地存储类ThreadLocal
预备知识:int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));第一个参数为指向一个键值的指针,第二个参数指明了一个destructor函数,如果绑定的函数不为空,那么当每个线程结束时,系统将调用这个函数来释放绑定在这个键上的内存块。key一旦被创建,所有线程都可以访问它,但各线程可根据自己的需要往...原创 2019-12-20 14:42:19 · 163 阅读 · 0 评论 -
学习muduo库(7)之单例类Singleton
UML:pthread_once(&ponce_, &Singleton::init);pthread_once(&ponce_, &Singleton::init);是一个线程安全的,且保证Singleton::init仅仅被执行一次。解释:Singleton是一个模板类,而且所有的成员都是静态的,所有不用生成对象。使用时这样写:mud...原创 2019-12-20 09:27:00 · 331 阅读 · 0 评论 -
学习muduo库(6)之线程池类ThreadPool
UML:这是一个十分重要的类,这个类中维护了两个队列,一个是任务队列,一个是线程队列。我们将任务放到任务队列中,线程队列从任务队列中不断地读取任务。线程队列的尺寸是自己定义的,所以线程队列是一个大小固定的队列。任务队列是一个std::deque,我们可以设置它的最大尺寸。两个条件变量是用来优化任务队列的读写的,类似于BoundedBlockingQueue...原创 2019-12-19 21:13:46 · 233 阅读 · 0 评论 -
学习muduo库(5)之有界缓冲区类无界缓冲区类BlockingQueue和BoundedBlockingQueue
UML:BlockingQueue这是一个用std::deque设计的线程安全的队列,其实要想简单的保证队列的线程安全,只需要在读写的时候加上锁就行啦。为了提高效率,这里引入了条件变量。产生的效果就是,当读出数据时,发现这个队列是空的,就把这个线程挂起到条件变量上,当写入数据的时候就唤起所有正在等待条件变量的线程。写法如下:void put(const T& x) ...原创 2019-12-19 11:46:58 · 319 阅读 · 0 评论 -
学习muduo库(4)之门闩类CountDownLatch
UML:解释:CountDownLatch类是一个通过条件变量类condition,来实现让多个子线程同时起跑的。其实count_是表示需要建立的线程数,当count_大于零时,线程会被条件变量挂起。每建立一个线程count_都会减一,当最后一个线程建立成功后,count_减为零。这个时候就唤起所有被条件变量挂起的线程。这些线程同时起跑。关键的代码如下:void CountD...原创 2019-12-19 10:52:43 · 240 阅读 · 1 评论 -
学习muduo库(3)之条件变量condition类
预备知识:pthread_cond_t这是Linux库中的一个变量类型,表示多线程的条件变量,用于控制线程等待和就绪的条件。pthread_cond_init()muduo库用次函数来初始化条件变量。它的原型为:extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condat...原创 2019-12-17 17:54:33 · 288 阅读 · 0 评论 -
学习muduo库(2)之互斥锁MutexLock类
UML类图:解释:供我们使用的是lock()和unlock()这两个函数,与Linux自带的互斥量使用方法类似。需要解释的是holder_,这个变量使用来记录当时锁住锁的线程的tid,如果没有任何线程锁住锁它的值为0。就是通过这种方式来体现MutexLock的上锁和解锁的。在源码中是这样体现的: void lock() ACQUIRE() { MCHECK...原创 2019-12-17 15:54:56 · 216 阅读 · 0 评论 -
学习muduo库(1)之CmakeLists.txt的编写
CMakeLists.txt有很多复杂的写法,尤其是设置一些变量的时候,我这里只写出来最简单的写法,没有变量全部用绝对路径来写,这对新手来说,最友善。cmake_minimum_required(VERSION 2.6) //限制最低版本project(pas CXX) //cmake的工程名叫做pas,限定语言为c++ADD_DEFINITIONS(-std=c++11) //采用...原创 2019-12-16 14:15:33 · 356 阅读 · 0 评论