对于一个无界的阻塞队列而言,其实现非常简单,即用一个锁(锁队列)+ 一个条件变量(判空)即可。那么对于一个有界阻塞队列而言,其队列的容量有上限,其实只要再加一个条件变量用来判断是否满即可。 综上,我们需要 mutex: 保护队列的读写操作 notEmptyCV: 条件变量,在take时 ...
实现动机 工厂方法是最简单地创建派生类对象的方法,也是很常用的,工厂方法内部使用switch case根据不同的key去创建不同的派生类对象,下面是一个伪代码。 随着时间的流逝,消息种类越来越多,这个switch case会越来越长,我在一个开源项目中看到过一百多个case语句,显然这种简单工厂已经不堪负荷,这样的代码对于维护者来说也是一个噩梦。要消除这些长长的switch case语句是一个需要 ...
2015-12-30 21:51 9 6756 推荐指数:
对于一个无界的阻塞队列而言,其实现非常简单,即用一个锁(锁队列)+ 一个条件变量(判空)即可。那么对于一个有界阻塞队列而言,其队列的容量有上限,其实只要再加一个条件变量用来判断是否满即可。 综上,我们需要 mutex: 保护队列的读写操作 notEmptyCV: 条件变量,在take时 ...
前言 C++11之前我们使用线程需要系统提供API、posix线程库或者使用boost提供的线程库,C++11后就加入了跨平台的线程类std::thread,线程同步相关类std::mutex、std::lock_guard、std::condition_variable、std ...
在单位写代码没法用c++11,为了方便写代码,今天趁着空闲时间写了个unique_ptr的简单实现 测试代码 [NEWOBJ][Obj] this =00000000002C7D20 nMyMem= 100 ...
boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换。boost::lexical_cast的用法比较简单: View Code c++11中缺少 ...
AOP介绍 AOP(Aspect-Oriented Programming,面向方面编程),可以解决面向对象编程中的一些问题,是OOP的一种有益补充。面向对象编程中的继承是一种从上而下的关系,不 ...
c++11 闭包的实现 什么是闭包 闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。 一个函数,带上了一个状态,就变成了闭包了。那什么叫 “带上状态” 呢? 意思是这个闭包有属于自己的变量,这些个变量的值是创建闭包 ...
实现一个简易版的c++11 tuple。 我使用的编译器是gcc,codeblocks13.12自带的,哪个版本我不熟gcc也没去查。 大致看了下他家的tuple实现,多继承,tuple之上还有2个辅助类,走的是类似loki中GenScatterHierarchy的路子。1092行代码,不是盖 ...
原文转自 https://blog.csdn.net/lmb1612977696/article/details/77712170 c++11加入了很多新的特性,值得我们去探索。 先看一个例子:普通的、不能自动的释放自己的锁 借助对象的析构函数自动调用的原理 ...