摘要: 1 #ifndef PROCESS_LOG_H 2 #define PROCESS_LOG_H 3 4 #include <string> 5 #include <sstream> 6 #include <cstring> 7 8 #include <fcntl.h> 9 #include <sys 阅读全文
posted @ 2020-06-21 17:35 wa小怪兽 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 直接把注释写到代码中: int __pthread_mutex_lock (pthread_mutex_t *mutex) { unsigned int type = PTHREAD_MUTEX_TYPE_ELISION (mutex); //安全检查 LIBC_PROBE (mutex_entry 阅读全文
posted @ 2020-06-20 20:49 wa小怪兽 阅读(2711) 评论(0) 推荐(0) 编辑
摘要: c++11的thread库提供了获取tid的接口: std::this_thread::get_id() 这个接口返回的是一个内存地址指向表述线程的结构体(pthread也是一样)。 有的时候这种方式获取的pid过长,可以使用syscall获取lwp,也就是top -H中看到的id,但也要注意sys 阅读全文
posted @ 2020-06-19 14:42 wa小怪兽 阅读(5849) 评论(0) 推荐(0) 编辑
摘要: 使用两个缓存区存放日志,每个缓存区为一个hash表,通过线程id计算对应的hash值,将日志存入对应的位置。 一个log线程读取缓存区,并将其写入log文件,每次将两个缓存区更换,防止锁争用的开销,将缓冲区的日志写入文件后再次对换缓冲区,循环往复。 logger.h 1 #ifndef LOGGER 阅读全文
posted @ 2020-06-17 20:27 wa小怪兽 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 当两个头文件a.h和b.h存在相互引用的状况时,可以在其中一个头文件预先定义类型。如: // A.h class B; class A{ B data; public: void fun(); }; //B.h #include "A.h" class B{ public: int data; } 阅读全文
posted @ 2020-06-03 16:56 wa小怪兽 阅读(1066) 评论(0) 推荐(0) 编辑
摘要: 看书看到这个地方,使用&运算计算hash对应的下标。 两个数&运算得到小于等于两个数中最小的值,位运算比%运算效率更高。 阅读全文
posted @ 2020-05-07 20:49 wa小怪兽 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 涉及到以下汇编指令: pushl: 入栈 ebp指向栈底 esp指向栈顶 入栈时只需要将esp下移, 将入栈的值放入esp指向的地址,如下图所示: popl: 出栈 先将栈顶的数据保存,再将esp上移 call:顾名思义,调用一个函数 调用一个函数需要将当前执行到的指令位置(eip寄存器的值)保存, 阅读全文
posted @ 2020-05-06 23:17 wa小怪兽 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。 为了实现函数重载的功能,函数名就不能再作为一个函数的唯一标识,而是使用了name-mangling方法将函数名转化为了一个独一无 阅读全文
posted @ 2020-05-05 22:16 wa小怪兽 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 不要将函数的返回值设为&&, std::string &&get(){ std::string s = "str";return std::move(s); } 代码中返回的字符串s在函数返回时就已经离开作用域调用析构函数,函数的得到的返回值其实是一个野指针。 阅读全文
posted @ 2020-05-03 13:16 wa小怪兽 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 使用gettimeofday(),没有系统调用的开销。 std::string getTime(void) { timeval tv; tm * time; std::stringstream ss; if(gettimeofday(&tv, nullptr) == -1){ throw errno 阅读全文
posted @ 2020-05-02 23:49 wa小怪兽 阅读(577) 评论(0) 推荐(0) 编辑