发布一个 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 平台。

Linux下pthread线程库介绍

1、概述多线程程序作为一种多任务、并发的工作方式,有以下的优点:1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的...
  • orzorz
  • orzorz
  • 2010年04月01日 06:22
  • 5153

30款Linux 高性能网络开发库开源软件

Lua的epoll模块 lua-epoll Lua的epoll模块 更多细节,请查看sample.lua API: ok,err=epoll.setnonblocking(fd)...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

c++11多线程库

标准线程库,c++11引入,包含原子操作库、互斥锁、条件变量。。。   一、线程库   创建线程的四种方法:   1. 通过全局函数创建线程 线程类的构造函数是变参构造函数,第一个参数是...

【C++多线程编程】Boost线程库

Boost线程库 Bill Kempf 译:伐木工 标准C++线程即将到来。CUJ预言它将衍生自Boost线程库,现在就由Bill带领我们探索一下Boost线程库。 就...
  • yockie
  • yockie
  • 2014年05月26日 00:31
  • 8100

Linux下c++多线程和互斥锁

一、多线程 多线程使用的是pthread库,写程序的时候需要引入头文件pthread.h, g++编译的时候需要加上该库的依赖“-lpthread”。 1 先看程序便于理解,代码下面有对注释的解释...
  • deyuzhi
  • deyuzhi
  • 2016年07月01日 11:43
  • 910

linux下 C++如何实现多线程

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。 线程的多任...

linux下的C\C++多进程多线程编程简易例子

多进程编程   #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 */ ch...

Linux C++的多线程编程

多线程编程
  • gxiaop
  • gxiaop
  • 2017年03月13日 14:36
  • 449

linux C++ 多线程浅尝

学习了几天Linux多线程,大多是看的别人的博客,并试着写了个小例子,现在也把学到的一些东西记录下来,供以后查阅,属于初级入门的范围,望共勉。   进程是系统中程序执行和分配资源的基本单位,每个进程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:发布一个 Linux 下的 C++ 多线程库
举报原因:
原因补充:

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