muduo
文章平均质量分 87
le119126
这个作者很懒,什么都没留下…
展开
-
muduo源码分析:线程池类ThreadPool
线程池包括成员变量:一个任务队列:deque queue_,用条件变量同步线程组:ptr_vector threads_bool running :标志是否start启动了,或者stop 停止了成员函数:start:初始化线程数目stop:停止线程池take:从queue中获取任务runInThread:线程执行函数 :循环 调用 take 获取任务,并执行原创 2015-12-09 22:01:23 · 2217 阅读 · 0 评论 -
muduo源码分析:无界队列和有界队列(消费者-生产者)
muduo库的队列很简单:无界队列put --生产take--消费size--返回现在的产品数产品存放在deque里面无界队列可以一直生产put,所以不用等待队列中有位置才生产,每生产一个产品就notify,只要通知一个消费者,不需要通知所有人只有消费take时要判断有无产品,所以只需要一个条件变量notEmpty,消费者用来等待notEmpty有产品可以消费#原创 2015-12-09 17:11:44 · 1428 阅读 · 1 评论 -
muduo源码分析:互斥锁、条件变量、倒计时封装
互斥锁封装:Mutex.hMutex类:对pthread_mutex_t 封装,提供了lock 、unlock 、是否被当前线程锁了isLockedByThisThread 、assertLocked 四个方法MutexLockGard类:通过传递Mutex引用,在构造函数中对其加锁,析构中对其解锁----RAII(资源的地点是构造函数,释放点是析构函数)#ifndef MUDUO_原创 2015-12-07 20:44:14 · 771 阅读 · 0 评论 -
muduo源码分析:异常类封装
Exception::what() 返回出错信息Exception::stackTrace() 返回出错时的调用栈实现:#includebacktrace,栈回溯,保存各个栈帧的地址backtrace_symbols,根据地址,转成相应的函数符号#include abi::__cxa_demangle :将编译修改过后的函数符号转化为原始代码中的函数符合原创 2015-12-06 18:51:55 · 552 阅读 · 0 评论 -
muduo源码分析:日志相关类(1)
1.stringPiece 类:当字符串来用统一 char * 字符串 和 std::string 。通过char *字符串 或者 string作参数 传递 字符串 ,形参为stringPiece类型,就不会有内存拷贝stringPiece 只有两个变量const char* ptr_; //字符串首地址int length_; //字符串长度其实 形参原创 2015-12-23 21:08:12 · 1042 阅读 · 0 评论 -
muduo源码分析:数值原子类封装和gcc提供的原子性操作
// 原子相加操作,先获取值*ptr加上value,返回原来的值type __sync_fetch_and_add (type *ptr, type value) // 原子比较和交换(设置)操作type __sync_val_compare_and_swap (type *ptr, type oldval ,type newval) //先判断*ptr是否等于oldval,如果相原创 2015-12-03 16:15:55 · 748 阅读 · 0 评论 -
muduo源码分析:线程类Thread封装
线程idLinux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而原创 2015-12-06 21:15:29 · 1604 阅读 · 0 评论 -
muduo源码分析:线程特定/私有数据类ThreadLocal
线程私有数据1.__thread : gcc内置的线程局部存储设施__thread只能修饰POD类型POD类型(plain old data),与C兼容的原始数据,例如,结构和整型等C语言中的类型是 POD 类型,但带有用户定义的构造函数或虚函数的类则不是__thread string t_obj1(“cppcourse”); // 错误,不能调用对象的构造函数__thre原创 2015-12-13 16:19:00 · 955 阅读 · 0 评论 -
muduo源码分析:ThreadLocalSigleton类
单例+特定数据// Singleton 所管理的对象是 ThreadLocal ,ThreadLocal 在进程内是单例,所有线程共一个ThreadLocal 实例 Singleton调用instance方法获取ThreadLocal实例,ThreadLocal实例调用ThreadLocal::value方法获取Test类型线程特定数据的引用,value返回的是各自线程原创 2015-12-14 21:06:39 · 711 阅读 · 0 评论 -
muduo库源码解析:单例模式singleton
单例模式实现boost::noncopyable 防止复制,如果是自己实现,那要把构造函数、拷贝构造,复制构造都私有公有方法:获取单例对象:instance() 返回 value 引用,(第一次 -->pthread_once --> init ) 私有:初始化new一单例:init()--并 atexit 注册销毁函数释放delete value构造函数、拷贝构造,复制原创 2015-12-12 17:09:51 · 1655 阅读 · 0 评论 -
muduo源码分析:reactor模型封装
图中FileDescriptor、socket都不是类EventLoop:loop --》poller::loop --》pollPoller ::loop 或者epollpoller,循环等待io事件poller是抽象类,pollpoller和epollpoller 是其子类,实现poll(),updateChannel(),和 removeChannel() 三个纯虚函数。c原创 2016-01-11 16:12:41 · 890 阅读 · 0 评论