摘要:pthread_rwlock_rdlock和“No such file or directory”调用pthread_rwlock_rdlock时,如果失败报错“pthread_rwlock_rdlock”,则可能是因为对同一把锁先加了写锁,再加读锁时就报这个错误了。...
阅读全文
摘要:目录目录 11. 前言 12. 示例Service 13. 网络部分类图 24. 线程模式 34.1. IO线程 34.2. 工作线程 44.2.1. 工作线程类图 44.2.2. 工作线程启动过程 55. 一个RPC函数被调用时序图 55.1. 启动准备 55.2....
阅读全文
摘要:随内核版本的变化,会增加一些新的系统调用,但如果glibc没有跟上,则不能直接调用,这个时候可以自己包装一下。如果想知道内核是否支持某系统调用,先得知道它的系统调用ID号,下面代码即是用来检查是否支持epoll_create1:// 文件名: x.cpp// 编译: ...
阅读全文
摘要:除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词):用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例:-Wl,-Bstatic -lm...
阅读全文
摘要:问题版本:0.9.0make[4]: Entering directory `/tmp/X/thrift-0.9.0/lib/cpp'/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG...
阅读全文
摘要:最近做的C/C++技术面试比较多,发现了一些共同的问题,对于如下所示的指针认识,多数面试者都答错了,作为过来人,这种情况还可以理解的,放在一起确实有些复杂。int *p;int *p[8];int (*p)[8];int (*p)();为了能朴素的理解,加上注释说明,...
阅读全文
摘要:什么是可epoll队列?就可以使用epoll来监控队列中是否有数据的队列,当然也支持select和poll。应用场景一个线程,需要将队列(共享内存队列或普通队列均可)中的数据取出来,然后通过网络发送出去。如果没有可epoll队列,这个问题处理起来就比较麻烦。代码实现实...
阅读全文
摘要:协程也叫微线程,英文名称为coroutine。一个进程可以有多个线程,一个线程可以有多个协程,这是协程和线程间的关系。不同的是,线程由系统调度,但协程需要自己调度,协程运行在用户态。Linux内核为协程编程提供了支持,相关的函数声明在ucontext.h头文件中。也可...
阅读全文
摘要:taskset是linux自带的一个命令,可用来将进程绑定到指定CPU相关的函数有: sched_setaffinity, CPU_CLR, CPU_ISSET, CPU_SET, CPU_ZERO// cpufreq库可在/usr/lib目录下找到// 编译: g+...
阅读全文
摘要:在没有tuple之前,如果函数需要返回多个值,则必须定义一个结构体,有了C++11,可以基于tuple直接做了,下面是个示例:// 编译:g++ -std=c++11 -g -o x x.cpp#include // tuple头文件#include #includ...
阅读全文
摘要:C++11之前,标准库没有提供数字类型转字符串的函数,需要借助sprintf、stringstream等,现在C++11提供了std::to_string函数,可以直接使用了:点击(此处)折叠或打开string to_string (int val);string t...
阅读全文
摘要:通过对Cuckoo Hash、多级Hash和BloomFilter的粗浅了解,感觉它们三者存在类似之处,算是近亲(暂且把普通的Hash称作远亲)。 Cuckoo Hash的思想非常简单,冲突时,重Hash,也就是为Key重新找个新的位置。显然,极端情况下,需要反反复...
阅读全文
摘要:目录目录 11. 什么是Lambda? 12. 语法格式 12.1. 语法格式 12.2. 最简定义 23. 应用示例 24. capture列表 34.1. 基本形式 34.2. 注意事项 35. 对比仿函数 36. 对比函数指针 47. Lamdba和STL 48...
阅读全文
摘要:消除重复代码代码很多种,比如:1)提炼成函数复用2)使用宏3)继承4)使用闭包(boost::bind、boost::function) 上述是最为常用的,对于C++程序,闭包可能用得相对少一点。下列代码使用的是第5种:利用#include消除重复代码:void f1...
阅读全文
摘要:C++11已支持bind和function,之前的不支持,但可以借助boost达到同样目的。看如下两段代码: 1) 创建HDFS目录void hdfs::init(){ if (0 == hdfsExists(fs, data_dirpath.c_str()))...
阅读全文
摘要:“undefined reference to JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析如果编译时,报如下所示错误:../../third-party/hadoop/lib/libhdfs.a(j...
阅读全文
摘要:# 本文可以从https://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb直接下载# 有关gdb的高级使用,请浏览:http://blog.csdn.net/Aquester/article/details/...
阅读全文
摘要:Linux上获取CPU Core个数的实现 可以通过多种手段取得CPU Core的个数,如:1) 调用系统提供的函数get_nprocs(),可以在头文件sys/sysinfo.h中发现它2) 借助系统提供的sysconf()函数:sysconf(_SC_NPROCE...
阅读全文
摘要:string是C++标准定义的字符串类,它不但支持文本,而且支持二进制字节流。给一个string变量赋值有多种方法:1) 拷贝构造函数2) 等号赋值函数3) append成员函数4) push_back成员函数5) insert成员函数 请运行下段代码,并查看它的输出...
阅读全文
摘要:#include #include #include #include #include #include #include #include #include // 读文件类class CFileReader{public: CFileReader() : _bu...
阅读全文