代码改变世界

随笔分类 - C & C++

C++11 并发指南七(C++11 内存模型一:介绍)

2013-11-14 16:38 by Haippy, 32249 阅读, 收藏, 编辑
摘要:第六章主要介绍了 C++11 中的原子类型及其相关的API,原子类型的大多数 API 都需要程序员提供一个 std::memory_order(可译为内存序,访存顺序) 的枚举类型值作为参数,比如:atomic_store,atomic_load,atomic_exchange,atomic_compare_exchange 等 API 的最后一个形参为 std::memory_order order,默认值是 std::memory_order_seq_cst(顺序一致性)。那么究竟什么是 std::memory_order 呢,为了解答这个问题,我们先来讨论 C++11 的内存模型。 阅读全文

C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)

2013-09-07 11:18 by Haippy, 19921 阅读, 收藏, 编辑
摘要:前面三篇文章《C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)》、《C++11 并发指南六( 类型详解二 std::atomic )》、《C++11 并发指南六(atomic 类型详解三 std::atomic (续))》都是采用 C++ 的方式介绍原子对象,本节我会给大家介绍 C++11 原子操作中 C 风格的 API。 阅读全文

C++11 并发指南六(atomic 类型详解三 std::atomic (续))

2013-09-06 11:22 by Haippy, 18745 阅读, 收藏, 编辑
摘要:C++11 并发指南六( 类型详解二 std::atomic ) 介绍了基本的原子类型 std::atomic 的用法,本节我会给大家介绍C++11 标准库中的 std::atomic 针对整形(integral)和指针类型的特化版本做了哪些改进。 阅读全文

C++11 并发指南六( <atomic> 类型详解二 std::atomic )

2013-09-05 22:32 by Haippy, 58378 阅读, 收藏, 编辑
摘要:C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍) 一文介绍了 C++11 中最简单的原子类型 std::atomic_flag,但是 std::atomic_flag 过于简单,只提供了 test_and_set 和 clear 两个 API,不能满足其他需求(如 store, load, exchange, compare_exchange 等),因此本文将介绍功能更加完善的 std::atomic 类。 阅读全文

C++11 并发指南后续更新

2013-08-31 17:28 by Haippy, 8608 阅读, 收藏, 编辑
摘要:C++11 并发指南的第一篇是 2013 年 8 月 3 号写的,到今天(2013 年 8 月 31 号)差不多一个月了,前前后后共写了 8 篇博客介绍 C++11 的并发编程,但还差 atomic 和 C++11 内存模型两章还在草稿中。今天回顾一下之前写的博客,发现内容还远远不够,很多东西都还也有完成,和自己计划差距还很远,我也想把这个系列一直写下去,一来对自己也是一种提高,另外 C++11 是一种趋势,了解 C++11 的并发编程对一个新时代的 C++ 程序员来说也是必修课,我也希望自己的这个系列博客能够帮助大家学习 C++11 的并发编程,所以我后面会把 《C++11 并发指南》放在 github 上持续更新 阅读全文

C++11 并发指南系列

2013-08-27 11:32 by Haippy, 59382 阅读, 收藏, 编辑
摘要:本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程 阅读全文

C++11 并发指南四(<future> 详解三 std::future & std::shared_future)

2013-08-27 10:55 by Haippy, 44595 阅读, 收藏, 编辑
摘要:上一讲《C++11 并发指南四(future 详解二 std::packaged_task 介绍)》主要介绍了 future 头文件中的 std::packaged_task 类,本文主要介绍 std::future,std::shared_future 以及 std::future_error,另外还会介绍 future 头文件中的 std::async,std::future_category 函数以及相关枚举类型。 阅读全文

C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)

2013-08-24 22:20 by Haippy, 25647 阅读, 收藏, 编辑
摘要:上一讲《C++ 并发指南四(std::future 详解一)》主要介绍了 头文件中的 std::promise 类,本文主要介绍 std::packaged_task。 阅读全文

C++11 并发指南四(<future> 详解一 std::promise 介绍)

2013-08-24 12:20 by Haippy, 53392 阅读, 收藏, 编辑
摘要:前面两讲《C++11 并发指南二(std::thread 详解)》,《C++11 并发指南三(std::mutex 详解)》分别介绍了 std::thread 和 std::mutex,相信读者对 C++11 中的多线程编程有了一个最基本的认识,本文将介绍 C++11 标准中 头文件里面的类和相关函数。 阅读全文

C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)

2013-08-11 23:17 by Haippy, 42131 阅读, 收藏, 编辑
摘要:前面八章介绍了 C++11 并发编程的基础(抱歉哈,第四章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——生产者消费者模型,并给出完整的解决方案。 生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源。本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模型,多生产者-单消费者模型,多生产者-多消费者模型,我会给出四种情况下的 C++11 并发解决方案,如果文中出现了错误或者你对代码有异议,欢迎交流 ;-)。 阅读全文

C++11 并发指南二(std::thread 详解)

2013-08-04 13:37 by Haippy, 147968 阅读, 收藏, 编辑
摘要:上一篇博客《C++11 并发指南一(C++11 多线程初探)》中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用法。 阅读全文

C++11 并发指南一(C++11 多线程初探)

2013-08-03 22:27 by Haippy, 126602 阅读, 收藏, 编辑
摘要:C++11 自2011年已经发布以来快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。 相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std:thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的。 阅读全文

CEF3 笔记三(常用类的介绍)

2013-06-10 23:17 by Haippy, 19324 阅读, 收藏, 编辑
摘要:接上文《CEF3 笔记二(常用的类介绍)》 阅读全文

CEF3 笔记二(常用类的介绍)

2013-06-10 23:16 by Haippy, 20716 阅读, 收藏, 编辑
摘要:CEF3 作为一个基于 Chromium 的嵌入式浏览器框架为开发者提供了几个基本的接口类来完成一些基本功能。 阅读全文

CEF3 笔记一(介绍)

2013-06-10 23:15 by Haippy, 22222 阅读, 收藏, 编辑
摘要:CEF 作为嵌入式浏览器框架最适合的应用场景应该是 HTML 页面渲染,所以很多程序都基于 CEF 来来应用程序提供 HTML 页面渲染的功能,如有道笔记,Evernote,GitHub Window Client,Q+,Adobe Brackets 等 阅读全文

C++11 lambda 表达式解析

2013-05-31 23:04 by Haippy, 93518 阅读, 收藏, 编辑
摘要:C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看。本文作为 5 月的最后一篇博客,将介绍 C++11 的 lambda 表达式。 阅读全文

如何实现简单的位数组(bit array)

2013-05-27 22:02 by Haippy, 10363 阅读, 收藏, 编辑
摘要:在 comp.lang.c 上面看到一则不错的 FAQ,《How can I implement sets or arrays of bits?》感觉很实用,仅仅使用了几个简单的宏就实现了一个基本的位数组(bitset)。 阅读全文

Zookeeper 的 Lua 绑定(二)

2013-04-15 22:19 by Haippy, 2646 阅读, 收藏, 编辑
摘要:经过前一段时间的开发和完善,Zookeeper 的 Lua 绑定已经基本完工了,一共42个Public APIs(还剩两个TODOs),主要由同步和异步接口以及一些辅助APIs组成。后续主要就是多写文档,多做测试,多除 Bug ;-) 阅读全文

Zookeeper 的 Lua 绑定

2013-04-07 00:07 by Haippy, 4351 阅读, 收藏, 编辑
摘要:以前写过一些有关 Zookeeper C API 的文章,自己觉得对 Zookeeper C API 比较熟悉,就想能不能利用 Zookeeper C API 给 Zookeeper 写一个 Lua 绑定呢,Google 一下发现以前也并没有人给 Zookeeper 贡献过 Lua 接口,python,ruby,GO,Node.js 等都有,连 Perl 官方都提供了接口,唯独缺 Lua,所以就想自己动手实现一个,并取名为 zklua,清明在实验室宅了两天把 zklua 的代码框架搭起来了,实现了部分 API,接下来就是填剩下的 API 了,争取利用四月份的空余时间写完,现在还幻想着写好 zklua(构建,文档,代码风格之类的细节)了以后能够回馈到Zookeeper社区,希望大家多提意见 ;-) 阅读全文

Google snappy 的 Lua 绑定

2013-03-30 23:54 by Haippy, 1723 阅读, 收藏, 编辑
摘要:趁着周末有时间写了 Google snappy (A fast compressor/decompressor) 的 Lua 绑定,希望对 Lua 程序员有所帮助 ;-) 代码和文档依旧放在 github 上: lua-snappy (https://github.com/forhappy/lua-snappy) 阅读全文

libuv 中文编程指南(一)序言

2013-03-17 21:57 by Haippy, 18363 阅读, 收藏, 编辑
摘要:本书由一系列 libuv 教程组成, libuv 是一个高性能事件驱动的程序库,封装了 Windows 和 Unix 平台一些底层特性,为开发者提供了统一的 API. 本书旨在涵盖 libuv 的主要特性, 并不是一份完整介绍 libuv 内部每个 API 和数据结构的指南, 官方文档 official libuv documentation 可以直接在 libuv 源码提供的头文件中找到. 阅读全文

libuv 中文编程指南(二)libuv 基础

2013-03-17 21:57 by Haippy, 47213 阅读, 收藏, 编辑
摘要:libuv 采用了 异步 (asynchronous), 事件驱动 (event-driven)的编程风格, 其主要任务是为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数, libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其他功能. 阅读全文

libuv 中文编程指南(三)文件系统

2013-03-17 21:57 by Haippy, 14899 阅读, 收藏, 编辑
摘要:简单的文件读写是通过 uv_fs_* 函数族和与之相关的 uv_fs_t 结构体完成的. libuv 提供的文件操作和 socket operations 并不相同. 套接字操作使用了操作系统本身提供了非阻塞操作, 而文件操作内部使用了阻塞函数, 但是 libuv 是在线程池中调用这些函数, 并在应用程序需要交互时通知在事件循环中注册的监视器. 所有的文件操作函数都有两种形式 - 同步 synchronous 和 asynchronous. 阅读全文

libuv 中文编程指南(四)网络

2013-03-17 21:57 by Haippy, 23825 阅读, 收藏, 编辑
摘要:libuv 的网络接口与 BSD 套接字接口存在很大的不同, 某些事情在 libuv 下变得更简单了, 并且所有接口都是都是非阻塞的, 但是原则上还是一致的. 另外 libuv 也提供了一些工具类的函数抽象了一些让人生厌的, 重复而底层的任务,比如使用 BSD 套接字结构来建立套接字, DNS 查询, 或者其他各种参数的设置. libuv 中在网络 I/O 中使用了 uv_tcp_t 和 uv_udp_t 两个结构体. 阅读全文

Zookeeper C API 指南

2013-02-21 11:34 by Haippy, 23200 阅读, 收藏, 编辑
摘要:Zookeeper C API 指南是一系列文章组成的,共分为 8 篇和大家分享,由于水平有限,还望各位读者指出系列文章中的错误,我定当感激涕零 :-) 阅读全文

Zookeeper C API 指南一(准备工作)

2013-02-21 11:16 by Haippy, 29911 阅读, 收藏, 编辑
摘要:以前本博客中转载、翻译或写过(自己才疏学浅,写的不好)一些 Zookeeper 方面的文章,但是都没有涉及到 Zookeeper C API 的内容,今天的这篇博客是我农历新年的第一篇技术博客,我想详细讲讲 Zookeeper C API 的使用规则和示例,算是把以前的旧帐还上吧 :-) 阅读全文

Reveldb 与 Kyoto Tycoon 性能对比(一)

2013-01-03 20:36 by Haippy, 3465 阅读, 收藏, 编辑
摘要:Reveldb 是个人在空余时间和周末完成(应该说还远远未完善)的一个基于 google leveldb 的 NoSQL 数据服务器,网络连接采用了 libevent 的 HTTP 接口,因此 reveldb 天生就适合处理 HTTP 请求。但更确切地说,reveldb 并没有直接采用 libevent 的 HTTP 接口,而是使用了另外一个基于 libevent 的网络连接库 libevhtp(https://github.com/ellzey/libevhtp),并对它做了适当的修改,使之成为 reveldb 的底层组件 evhttpx(https://github.com/forhappy/reveldb/tree/master/src/evhttpx), evhttpx 为 reveldb 提供了 HTTP 和 HTTPS 支持,因此,reveldb 除了能够处理 HTTP 请求外,也能够处理 HTTPS 请求,这一特性是 Kyoto Tycoon 没有的,如果它有,请您告诉我 :-) 阅读全文

如何实现 C 语言的继承和多态

2012-12-31 13:18 by Haippy, 10258 阅读, 收藏, 编辑
摘要:上面一篇博客中写了《如何实现 C 的函数重载》,本文将进一步讲讲如何实现 C 语言的继承和多态,其实大致的思想已经在前面的一篇博客《200 行 C 代码实现插件式 NOSQL 存储服务器(一)》中体现过了,主要就是如何灵活运用C的函数指针这一特性! 阅读全文

如何实现 C 的函数重载

2012-12-27 11:18 by Haippy, 20374 阅读, 收藏, 编辑
摘要:大家都知道 C++ 等面向对象的语言支持函数重载,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串,以区分不同重载函数,然后在调用的时候根据参数的不同选择合适的函数,如下代码说明了编译器是如何处理普通函数重载的: 阅读全文

深入浅出 Barriers 实现(一)

2012-12-26 19:29 by Haippy, 8728 阅读, 收藏, 编辑
摘要:Barriers,字面意思为“壁垒,屏障,栅栏”,在计算机领域中 Barriers 也有它独特的含义,具体来讲,在并行程序中,Barriers 是一种同步的手段,可被视为一种线程同步原语,如一组线程/进程的 Barrier 可以用来同步该线程/进程组,只有当该线程/进程组中所有线程到达屏障点(可称之为同步点)时,整个程序才得以继续执行。 阅读全文

200 行 C 代码实现插件式 NOSQL 存储服务器(一)

2012-11-24 22:30 by Haippy, 3559 阅读, 收藏, 编辑
摘要:初一看,你肯定会觉得作者在忽悠人吧,200 行 C 代码居然可以实现插件式 NOSQL 存储服务器?是的,200 行 C 代码确实可以做到,但只能是一个极其简单的代码框架而已,不过感兴趣的同鞋可以在此基础上进行扩展。 阅读全文

如何在Linux下实现你的线程池(Step By Step,Pthread)

2012-09-28 20:39 by Haippy, 3363 阅读, 收藏, 编辑
摘要:200行C代码就可以实现线程池?开玩笑吧?不,告诉你,我是认真的,200行C代码真的可以实现一个简单可用的线程池!!! 阅读全文

如何将 Linux 内核实现的红黑树 rbtree 运用到你的 C 程序中?

2012-09-02 23:48 by Haippy, 17255 阅读, 收藏, 编辑
摘要:相信大家都知道红黑树是什么吧,但是呢......如果你确实不知道,你不该穿越到这儿的,你应该去这里,这里,还有这里看看,然后再来这里看看,最后如果大爷您赏脸,再来看看我吧 :-) 阅读全文

三行代码实现C语言单元测试框架

2012-08-23 22:49 by Haippy, 4684 阅读, 收藏, 编辑
摘要:三行代码实现C语言单元测试框架?对,你没有听错,三行代码确实可以实现一个简单的C语言的测试框架。 阅读全文

布隆过滤器(Bloom Filter)的C语言实现

2012-07-14 22:47 by Haippy, 5067 阅读, 收藏, 编辑
摘要:前文《布隆过滤器(Bloom Filter)详解》主要讲了布隆过滤器(Bloom Filter)的基本原理和相关应用,本文将使用C语言实现一个简单的布隆过滤器(Bloom Filter)。 阅读全文

布隆过滤器(Bloom Filter)详解

2012-07-13 18:35 by Haippy, 52433 阅读, 收藏, 编辑
摘要:布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的)。 阅读全文