發(fā)布一個我自己業(yè)余時間編寫的 C++ 多線程庫 for Linux,這個庫只有不到 1000 行源代碼,封裝了 pthreads 的常用功能(互斥器、條件變量、線程),實現(xiàn)了簡單的線程池,并仿照 java concurrent 包編寫了 BlockingQueue 和 CountDownLatch。庫里的每個 class 都提供了使用樣例。
這個庫的內(nèi)容:
- 整數(shù)的原子操作, AtomicInt32 和 AtomicInt64
- 線程,Thread
- 線程池,ThreadPool
- 互斥器與條件變量, MutexLock,MutexLockGuard 與 Condition
- 帶調(diào)用棧信息 (stack trace) 的異常基類,Exception
- 仿 Java concurrent 的 BlockingQueue 和 CountDownLatch
- Singleton 與 ThreadLocal
注:我故意沒有提供信號量 Semaphore 的封裝。將來或許會增加讀寫鎖的封裝,如果我在博客中用到的話。
Thread 和 ThreadPool 的接口設(shè)計采用了《以 boost::function 和 boost:bind 取代虛函數(shù)》里提倡的風(fēng)格,沒有使用繼承和基類。
注意,CurrentThread 有一個 thread local 變量 t_threadName,其作用是在調(diào)試和分析 core dump 時打印線程的名稱,例如:
(gdb) p 'muduo::CurrentThread::t_threadName'
$4 = 0x4057fe "ThreadPool2"
MutexLock,MutexLockGuard 與 Condition 的使用請參考《多線程服務(wù)器的常用編程模型》。
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 平臺。