c++
稳健明
全栈是未来的趋势,做全栈开发。慢慢来,坚持住明天的我会感谢今天的自己。wechat:wzm921128
展开
-
C++STL容器部分操作多线程不安全
最近项目中发现一个c++stl容器多线程查找可能出现CPU占用率100%的问题。 问题是这样的,线程A和线程B共享一个stl::map。其中线程A对map有查找的操作,线程B对map有删除的操作。收集其core文件后发现线程A一直在map的查找中循环。看map查找函数中确实用一个while循环实现。确定为线程B删除了线程A查找的值导致线程A中陷入了map表查找死循环中。 总结:C++原创 2017-05-11 23:35:43 · 3818 阅读 · 0 评论 -
基于ACE中ACE_Event_Handler的定时器管理器实现
在C++项目开发中有许多用到定时器的地方,比如各个进程间定时发心跳数据,ftp服务定时扫描文件等等。由于定时器实现一般属于框架类的东西,工作中如果业务做的比较多的话容易忘记,这里记录一下基于ACE的定时器管理器的实现。【定时器类】 1、由于是要被管理的,所以每个定时器都需要有一个定时器Id; 2、handle_timeout函数为定时器到点时候调用的函数; 3、设置定时器ID; 4、获取定原创 2017-05-19 00:22:39 · 1138 阅读 · 0 评论 -
C/C++中打印函数的一个小注意点
C/C++ 打印函数问题原创 2017-11-07 10:43:52 · 2141 阅读 · 0 评论 -
C++大内存申请
1、未始化的全局变量 代码:int szTestData[1024 * 1024 * 1024] = {0};int main(){// int* piTestData = new int[1024 * 1024 * 1024]; return 0;}结果: 可以编译通过 但是运行结果为Segmentation fault (core dumped)原创 2018-01-26 12:06:30 · 3161 阅读 · 0 评论 -
C++11 array
大学期间没有学过C++,大学毕业后开发主要的语言是C++,其实应该说是C++98。看了c++ primer等书籍,有好多感觉都用不着。后来接触了golang,渐渐的发现C++98用起来很不方便。现在学习C++11发现,其实C++11已经和现在很多高级语言使用起来一样方便了,且不失去其高效性。所以,C++没有GC。后续,将慢慢学习C++11,从array开始记录吧。先不研究内部实现,后续再深入研究原创 2018-01-26 15:39:23 · 2520 阅读 · 0 评论 -
C++11 bitset
C/C++比较多的会应用在相对比较底层的服务,所以有可能会遇到位操作。在结构体中会有位域来简化位操作。这里,来介绍下C++11标准库中bitset的使用。1、构造函数 —默认构造,所有位都为0 —入参为对应数值类型 —入参为string 例子:// constructing bitsets#include // std::cout原创 2018-01-26 17:48:39 · 673 阅读 · 0 评论 -
C++11 forward_list
C++11 中forward_list是一个单向链表,单向链表有其对应的有缺点吧。总体上其有缺点都不是很明显,所以不是很常见。主要还是用做优先级队列会比较合适。1、构造函数 —-默认构造,返回一个空链表 —-两个参数,一个为正整型n,一个位对应存储结构x,初始化n个节点,所有节点值位x —-两个参数都为对应结构的迭代子。创建一个新链表,内容为两个迭代子原创 2018-01-30 10:59:48 · 412 阅读 · 0 评论 -
linux中/proc/buddyinfo的作用
在应用程序设计过程中,内存是很重要的资源,而计算机主机的内存资源时有限的。一般而言我们可以申请到的内存是有限的,并不是想申请多大就有多大就可以申请多大的。/proc/buddyinfo文件里,就记录着系统的内存资源。linux内核中使用了buddy算法来管理内存以减少内存碎片的产生,buddy算法管理最小的单一为PAGE_SIZE,一般情况下大小为4K。以2的N次幂一次增加。如下图表示,在no...原创 2018-03-29 18:21:33 · 4686 阅读 · 0 评论