Tour

Action speaks louder than words ...

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2014年11月30日

摘要: 在类的定义中,我们通常会重载赋值操作符,来替代编译器合成的版本,实现中会对每个类的成员变量进行具体的操作,比如下面的代码: 1 class Sales_Item 2 { 3 public: 4 Sales_Item& operator=(const Sales_Item & rhs); ... 阅读全文
posted @ 2014-11-30 11:43 Tourun 阅读(853) 评论(0) 推荐(0) 编辑

2014年11月24日

摘要: 多线程程序中,我们经常会遇到这种情况,主线程启动时加载一些参数到内存中的某个对象或者数据结构中,将这个对象或数据结构作为参数传入各个子线程中,为了避免对象的复制与拷贝,往往传入的是指针,子线程启动,进行业务逻辑处理,需要根据key值获取hashtable中的value,value = m_pPa... 阅读全文
posted @ 2014-11-24 15:13 Tourun 阅读(973) 评论(0) 推荐(0) 编辑

2014年11月23日

摘要: 上篇文章尝试着使用head lock和tail lock分别在Get和Add元素时,对队列进行上锁,这样就避免了每次操作都锁住整个队列,缩小了锁的粒度。这里还有个问题,队列中持有的T对象指针,均是由调用者动态分配和释放的,如果调用量特别大,new/delete操作频繁,同样会导致性能下降,可能使... 阅读全文
posted @ 2014-11-23 23:11 Tourun 阅读(4156) 评论(0) 推荐(1) 编辑

2014年11月19日

摘要: 我们知道,对于一个队列而言,最主要的两个操作是添加元素(Add)和获取/删除元素(Get),之前文章中实现了一个linux下通用的阻塞队列BlockQueue,通过代码可以看出,为了保证在多线程环境下安全正确的运行,BlockQueue定义中的几个关键函数都进行了加锁保护,而锁住的对象是整个队列... 阅读全文
posted @ 2014-11-19 16:18 Tourun 阅读(1174) 评论(1) 推荐(0) 编辑

2014年11月18日

摘要: 生产者消费者问题是一个多线程同步问题的经典案例,大多数多线程编程问题都是以生产者-消费者模式为基础,扩展衍生来的。在生产者消费者模式中,缓冲区起到了连接两个模块的作用:生产者把数据放入缓冲区,而消费者从缓冲区取出数据,如下图所示: 可以看出Buffer缓冲区作为一个中介,将生产者和消费者分... 阅读全文
posted @ 2014-11-18 16:21 Tourun 阅读(2387) 评论(0) 推荐(0) 编辑

2014年11月9日

摘要: 相信大家对NULL不会很陌生,NULL 是一个标准规定的宏定义,用来表示空指针常量,当一个指针变量被赋值为NULL时,表示它不再指向任何有效地址,无法在访问任何数据。在VS2012库文件stdio.h中有如下定义:1 #ifdef __cplusplus2 #define NULL 03 ... 阅读全文
posted @ 2014-11-09 14:33 Tourun 阅读(2592) 评论(0) 推荐(1) 编辑

2014年11月8日

摘要: 给定一个有序数组a(从小到大排列),数组中的数据有正有负,找出这个数组中的绝对值最小的元素。最先到的自然是从头到尾依次遍历数组中的每个元素,找出绝对值最小的元素。这是最简单的方法,不过它并没有用到数组有序这个特性,现在我们来看看有没有更好的方法。题目要求在数组中查找元素,并且此数组有序,那么可以... 阅读全文
posted @ 2014-11-08 12:14 Tourun 阅读(2038) 评论(1) 推荐(0) 编辑

2014年11月7日

摘要: 将一个正整数表示为连续自然数的和,比如给定整数15,那么根据题意,需要输出的连续自然数为1+2+3+4+5=4+5+6=7+8=15。题目中的连续自然数序列可以看做一个升序的有序数组,取数组前两个数为起始的区间的左右两个端点。对区间中的值进行累加,如果累加值小于给定的整数时,那么右端点向右移动,... 阅读全文
posted @ 2014-11-07 23:25 Tourun 阅读(2801) 评论(3) 推荐(0) 编辑

2014年11月6日

摘要: 之前工作中遇到一个问题,就像题目中描述的那样,看起来题目有些拗口复杂,这里解释下,当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的、无意义的。这个需求可以看做是在调用某成员函数时,第一次进行初始化,其他时候不进行操作,即在首次调用时进行初始化... 阅读全文
posted @ 2014-11-06 23:24 Tourun 阅读(2406) 评论(3) 推荐(0) 编辑

2014年10月31日

摘要: 在数组中,数字减去它右边的数字得到一个数对之差,求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分析上面的例子,要使得数对之差的值越大,那么减数的值越小而被减速的值越大(在减法算式中,减号前面的数是被减数,减号... 阅读全文
posted @ 2014-10-31 00:12 Tourun 阅读(1744) 评论(1) 推荐(0) 编辑