随笔分类 -  C/C++

摘要:目录后端AsyncLogging类数据成员LargeBuffer 存放大量log消息后端线程 异步写数据到log文件LogFile类构造函数滚动日志文件日志文件名写日志文件操作flush日志文件AppendFile类数据结构RAII方式打开、关闭文件写数据到文件使用异步日志小结参考 前半部分mudu 阅读全文
posted @ 2022-03-07 16:58 明明1109 阅读(1720) 评论(4) 推荐(2) 编辑
摘要:目录日志库模型前端Logger类日志等级类型LogLevel用户接口构造函数输出位置,冲刷日志日志等级,时区析构函数Impl类Impl的数据结构Impl构造函数LogStream类实现Small Buffer存放log消息operator<<格式化数据staticCheck()静态检查小结 后半部分 阅读全文
posted @ 2022-03-06 22:45 明明1109 阅读(3002) 评论(4) 推荐(2) 编辑
摘要:目录线程类Thread要解决的问题封装线程类ThreadThread 接口Thread 实现内部类ThreadData当前线程CurrentThreadcacheTid()获取当前线程tidisMainThread()判断调用线程是否为main线程sleepUsec() 休眠指定微秒数ThreadN 阅读全文
posted @ 2022-02-28 21:30 明明1109 阅读(699) 评论(5) 推荐(0) 编辑
摘要:目录多线程同步中的问题CountDownLatchCountDownLatch的接口CountDownLatch的实现barrier实现线程同步barrier与自定义CountDownLatch区别参考 多线程同步中的问题 多线程环境中,常有这样一种同步情况:一个线程等待其他所有线程完成指定工作。 阅读全文
posted @ 2022-02-28 11:22 明明1109 阅读(379) 评论(0) 推荐(0) 编辑
摘要:目录互斥锁mutex的选择MutexLock类MutexLockGuard类测试 互斥锁mutex的选择 互斥锁mutex有2种方案: 1)C++11以后,使用std::mutex,当然,特殊应用场景下,也有另外三种:std::recursive_mutex(递归mutex类),std::timed 阅读全文
posted @ 2022-02-27 23:36 明明1109 阅读(748) 评论(0) 推荐(0) 编辑
摘要:目录值语义与引用语义如何为一个class实现值语义,引用语义?定义标记class,标明对象拷贝性copyable classnoncopyable classcopyable及noncopyable应用阻止copy操作 值语义与引用语义 值语义指的是对象的拷贝与元对象无关,就像拷贝int一样。C++ 阅读全文
posted @ 2022-02-27 21:01 明明1109 阅读(282) 评论(0) 推荐(0) 编辑
摘要:目录原子操作AtomicIntegerT<T>模板类单元测试知识点gcc原子操作volatile关键字参考 原子操作 C++中的原子操作: 1)C++11以后,提供st::atomic<T>可以实现T类型数据的原子操作,主要包括:初始化、读取值、写值、自增自减(i.e. 前置或后置++)等。 2)对 阅读全文
posted @ 2022-02-27 20:44 明明1109 阅读(378) 评论(0) 推荐(0) 编辑
摘要:如何度量程序在某一时刻的时间? 通常,我们用时刻来表示,比如"2022-02-26 23:43:00.000000",这种方式便于人查看,但不便于程序中的比较和计算。比如有2个时刻A和B,计算哪个时刻在前,哪个在后,或者要计算时刻A和B的时间差时,这种字符串表示方式就很麻烦。 我们想到将字符串形式的 阅读全文
posted @ 2022-02-27 20:16 明明1109 阅读(913) 评论(0) 推荐(0) 编辑
摘要:Linux有2种方法可以实现线程局部存储: 1)使用NTPL提供的函数; 2)使用编译器扩展的__thread关键字。 NPTL(Native POSIX Thread Library),顾名思义,本地POSIX线程库。 1. 使用NPTL库函数实现线程局部存储 NPTL提供实现线程局部存储功能的接 阅读全文
posted @ 2022-02-24 23:24 明明1109 阅读(381) 评论(0) 推荐(0) 编辑
摘要:上半部分,见C++ Primer学习笔记 - 第16章 模板与泛型编程(一) 16.3 重载与模板 函数模板可以被另一个模板或普通非模板函数重载。跟普通函数重载一样,名字相同的函数必须具有不同数量或类型的参数。 如果涉及到函数模板,则函数匹配规则会在下面几个方面受到影响: 对于一个调用,其候选函数包 阅读全文
posted @ 2022-02-21 22:42 明明1109 阅读(98) 评论(0) 推荐(0) 编辑
摘要:前一节Linux backtrace()系列函数 ,已经知道可以通过backtrace,backtrace_symbols得到函数的调用栈信息。不过,在C++中,得到的是一堆难以识别的符号,如何解码得到准确的函数名信息? 如,前面得到的函数调用栈信息: $ ./backtrace 2 backtra 阅读全文
posted @ 2022-02-15 12:21 明明1109 阅读(346) 评论(0) 推荐(0) 编辑
摘要:backtrace()系列函数 backtrace()系列函数有3个:backtrace,backtrace_symbols,backtrace_symbols_fd。主要用于应用程序反调试(self-debugging)。 参见man 3 BACKTRACE,3个函数原型: #include <e 阅读全文
posted @ 2022-02-15 00:22 明明1109 阅读(4297) 评论(0) 推荐(0) 编辑
摘要:18.1 异常处理 异常处理(exception handling)机制,允许程序中独立开发的部分能够在运行时就出现的问题进行通信,并做出相应的处理。 异常使得我们能将问题的检测和解决过程分离开,传统C语言异常处理必须对每个函数返回的异常作处理,也就是检测和解决过程捆绑在一起。 这样做的优势在于: 阅读全文
posted @ 2022-02-14 16:42 明明1109 阅读(79) 评论(0) 推荐(0) 编辑
摘要:timerfd特点 timerfd的特点是将时间变成一个文件描述符,定时器超时时,文件可读。这样就能很容易融入select(2)/poll(2)/epoll(7)的框架中,用统一的方式来处理IO事件、超时事件。这也是Reactor模式的特点。 timerfd定时器与传统Reactor模式定时器 传统 阅读全文
posted @ 2022-02-12 13:39 明明1109 阅读(4133) 评论(0) 推荐(2) 编辑
摘要:计时函数 用于获取当前(日期)时间: time(2) / time_t (秒) ftime(3) / struct timeb (毫秒) gettimeofday(2) / struct timeval (微妙) clock_gettime(2) / struct timespec (纳秒) gmt 阅读全文
posted @ 2022-01-26 13:16 明明1109 阅读(285) 评论(0) 推荐(0) 编辑
摘要:基本概念 函数将一个或多个实参传递给其他函数,这个过程称为转发。 完美转发(perfect forwarding)是指转发过程中,保持被转发实参的所有原始性质,包括实参类型是否为const,左值 or 右值等。 转发 转发示例 编写一个转发的示例:翻转函数flip1能将2个参数逆序,传递给函数f。 阅读全文
posted @ 2022-01-19 00:22 明明1109 阅读(692) 评论(0) 推荐(1) 编辑
摘要:什么是智能指针? 智能指针是存储指向动态分配(位于堆)对象指针的类,用于生存期控制,能确保在离开指针所在作用域时,自动正确地销毁动态分配的对象,以防止内存泄漏。 智能指针通常通过引用计数技术实现:每使用一次,内部引用计数+1;每析构一次,内部引用计数-1,当减为0时,删除所指堆内存。 C++11提供 阅读全文
posted @ 2022-01-18 22:09 明明1109 阅读(1856) 评论(2) 推荐(0) 编辑
摘要:异步操作简介 什么是异步操作,为何会有异步操作? 在C++中,不能直接从thread.join()得到结果,必须定义个变量,在线程执行时,对这个变量赋值,然后执行join(),过程相对繁琐。 Linux中有AIO(异步IO)做异步操作,C++中如何进行异步操作? 答:是有的,C++11提供了异步操作 阅读全文
posted @ 2022-01-17 16:38 明明1109 阅读(1562) 评论(0) 推荐(1) 编辑
摘要:互斥量 C++11提供4种互斥量(mutex)语义,对于4个类: std::mutex 独占互斥量,不能递归加锁; std::timed_mutex 带超时的独占互斥量,超时自动解锁,不能递归加锁; std::recursive_mutex 递归互斥量,不带超时解锁功能; std::recursiv 阅读全文
posted @ 2022-01-16 23:22 明明1109 阅读(775) 评论(0) 推荐(0) 编辑
摘要:读写锁基本概念 读写锁(readers-writer lock),又称为多读单写锁(multi-reader single-writer lock,或者MRSW lock),共享互斥锁(shared-exclusive lock),以下简称RW lock。 读写锁用来解决读写操作并发的问题。多个线程 阅读全文
posted @ 2022-01-08 20:00 明明1109 阅读(8087) 评论(0) 推荐(6) 编辑