| by msbeta | No comments

C++多线程编程-分析每个函数的内存占用

最近遇到一个“内存占用不断增加”的问题,从代码上没有分析出任何异常,束手无策只有只有借助第三方工具Google Heap Profiler。Google Heap Profiler是Google开源性能内存检测工具GPerfTools系列工具中的一个,可以帮助我们检测代码中出现的内存泄露,帮助我们了[……]

继续阅读

Read More
| by msbeta | No comments

C++多线程编程-设计无锁并发堆栈

今天我们来设计一个并发堆栈(Stack),这个堆栈(Stack)虽然支持多线程访问,但是没有锁。

向堆栈压入数据

在push方法里,使用了C++11的CAS方法: compare_exchange_weak。compare_exchange_weak会比较当前值和期望值,当前值与[……]

继续阅读

Read More
| by msbeta | No comments

C++多线程-条件变量(Condition Variables)实现线程间事件(Event)通知机制

在实际的业务应用中,经常遇到需要多个线程协同的场景:

场景一:线程A挂起等待某个独占资源释放,线程B也在挂起等待某个独占资源释放,线程C在使用独占资源,使用完成后,唤醒线程A或者线程B进入工作状态。

场景二:线程A生产某种资源,线程B负责消费资源,没有资源供线程B消费时,线程B挂起,线程[……]

继续阅读

Read More
| by msbeta | No comments

C++11多线程-如何用带参数的类成员函数作为线程启动函数

1、使用非静态类成员函数作为线程启动函数

假设存在如下Task类,它有一个名为execute()的非静态成员函数。

现在我们计划用Task的类的成员函数execute()函数作为线程的启动函数。由于execute()是静态函数,为了调用该函数,我们必须首先实例化一个Task对象。

[……]

继续阅读

Read More
| by msbeta | No comments

c++编程之路-decltype关键字

1. decltype关键字的用途是什么

给定变量的名称或者表达式,decltype返回变量或者表达式的类型。如下所示:

2.decltype主要应用场景是模板函数

decltype在实际的开发中主要用于模板函数中,函数的返回值依赖于模板参数类型的情况。如下authAndAcc[……]

继续阅读

Read More
| by msbeta | No comments

C++基础-如何在函数中传递原生数组的长度

1. 原生数组在C/C++中退化问题

在C/C++中数组不会按值传递,它传递第一个元素的指针,下列三个声明是等价的:

void func(int* a);

void func(int a[]);

void func(int a[10]);

对于编译器而言,所有的声明都被[……]

继续阅读

Read More
| by msbeta | No comments

C/C++:如何定义和初始化二维数组

在C/C++中有很多定义数组的方式,在日常的应用中也会高频用到,今天一起看看有哪些定义和初始化二维数组的方式。

1、C/C++语言原始数组的方式

数组是C语言的原住民了,在第一代C语言中就已经出现了,在初学者的C/C++的入门书籍中也有详细的介绍。它对二维数组的定义如下:

co[……]

继续阅读

Read More
| by msbeta | No comments

C++11-右值引用作为函数参数

1、普通函数的右值引用参数

假设以右值引用为参数的普通函数的形式如下:

普通函数的右值引用可以接受哪些形式的实参:

1.1 常量表达式作为实参

形参为数值类型的常量的函数定义如下:

以数值常量为实参调用:

形参为字符串类型的常量的函数定义如下:

[……]

继续阅读

Read More
| by msbeta | No comments

C++11–使用表驱动(Table-Driven)模式消除冗长的if-else和switch-case语句

在日常的代码编写中经常出现不同数据格式转换的场景,比如给定一个整数,将其与每周的星期名称映射起来,该如何实现呢?

常见的实现途径是通过if-else或者switch-case的方式来实现,如下代码所示:

这样的代码优势是简单,初学者也可以写出这样的代码;代码的问题在于:
1) 代码太长[……]

继续阅读

Read More
| by msbeta | No comments

链表的二分搜索实现-跳跃表

跳跃列表是在很多应用中有可能替代平衡树而作为实现方法的一种数据结构。跳跃列表的算法有同平衡树一样的渐进的预期时间边界,并且更简单、更快速和使用更少的空间。

—-by 发明者

在redis中有序集合就使用到了跳跃表。

跳跃表允许快速查询一个有序连续元素的数据链表,它的效率可以做到和二分相同,都是[……]

继续阅读

Read More
  • 1
  • 2