发布一个 Linux 下的 C++ 多线程库

原创 2010年08月21日 23:41:00

发布一个我自己业余时间编写的 C++ 多线程库 for Linux,这个库只有不到 1000 行源代码,封装了 pthreads 的常用功能(互斥器、条件变量、线程),实现了简单的线程池,并仿照 java concurrent 包编写了 BlockingQueue 和 CountDownLatch。库里的每个 class 都提供了使用样例。

这个库的内容:

  • 整数的原子操作, AtomicInt32 和 AtomicInt64
  • 线程,Thread
  • 线程池,ThreadPool
  • 互斥器与条件变量, MutexLock,MutexLockGuard 与 Condition
  • 带调用栈信息 (stack trace) 的异常基类,Exception
  • 仿 Java concurrent 的 BlockingQueue 和 CountDownLatch
  • Singleton 与 ThreadLocal

注:我故意没有提供信号量 Semaphore 的封装。将来或许会增加读写锁的封装,如果我在博客中用到的话。

Thread 和 ThreadPool 的接口设计采用了《以 boost::function 和 boost:bind 取代虚函数》里提倡的风格,没有使用继承和基类。

注意,CurrentThread 有一个 thread local 变量 t_threadName,其作用是在调试和分析 core dump 时打印线程的名称,例如:

(gdb) p 'muduo::CurrentThread::t_threadName'
$4 = 0x4057fe "ThreadPool2"

MutexLock,MutexLockGuard 与 Condition 的使用请参考《多线程服务器的常用编程模型》。

CountDownLatch 的使用样例见 test/BlockingQueue_test.cc

git 下载地址: http://github.com/chenshuo/recipes

浏览源代码: http://github.com/chenshuo/recipes/tree/master/thread/

这个库在 Debian Squeeze 和 Ubuntu 10.04 LTS 下编译测试通过,适用于 x86 和 x86-64 平台。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

STL学习笔记— —容器map和multimap

简介在头文件 中定义namespace std { template <typename Key, typename T, typename Compare = le...

浅谈我对机器学习的理解

=============在网上看到关于一篇ML的文章,很不错,转载过来共勉=============算算时间,从开始到现在,做机器学习算法也将近八个月了。虽然还没有达到融会贯通的地步,但至少在熟悉了...
  • utimes
  • utimes
  • 2015-02-01 09:08
  • 1460

STL系列之四 heap 堆

下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include ...

STL之deque函数详解

#include deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似     函数 描述 ...

代码编写Button按钮

private void button1_Click(object sender, System.EventArgs e)        {       ...

STL系列之十 全排列(百度迅雷笔试题)

全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总...

堆和栈的区别

在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。       首先,我们举一个例子:       void f() { int*...

MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。一.白话经典算法,目前有17篇,分为七大排序和经典面试题讲解两大类。二.多线程,有15篇,内容全面。三.C++ STL,主要从源码角度分析。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)