發(fā)布一個(gè)我自己業(yè)余時(shí)間編寫的 C++ 多線程庫(kù) for Linux,這個(gè)庫(kù)只有不到 1000 行源代碼,封裝了 pthreads 的常用功能(互斥器、條件變量、線程),實(shí)現(xiàn)了簡(jiǎn)單的線程池,并仿照 java concurrent 包編寫了 BlockingQueue 和 CountDownLatch。庫(kù)里的每個(gè) class 都提供了使用樣例。
這個(gè)庫(kù)的內(nèi)容:
- 整數(shù)的原子操作, AtomicInt32 和 AtomicInt64
- 線程,Thread
- 線程池,ThreadPool
- 互斥器與條件變量, MutexLock,MutexLockGuard 與 Condition
- 帶調(diào)用棧信息 (stack trace) 的異常基類,Exception
- 仿 Java concurrent 的 BlockingQueue 和 CountDownLatch
- Singleton 與 ThreadLocal
注:我故意沒(méi)有提供信號(hào)量 Semaphore 的封裝。將來(lái)或許會(huì)增加讀寫鎖的封裝,如果我在博客中用到的話。
Thread 和 ThreadPool 的接口設(shè)計(jì)采用了《以 boost::function 和 boost:bind 取代虛函數(shù)》里提倡的風(fēng)格,沒(méi)有使用繼承和基類。
注意,CurrentThread 有一個(gè) thread local 變量 t_threadName,其作用是在調(diào)試和分析 core dump 時(shí)打印線程的名稱,例如:
(gdb) p 'muduo::CurrentThread::t_threadName'
$4 = 0x4057fe "ThreadPool2"
MutexLock,MutexLockGuard 與 Condition 的使用請(qǐng)參考《多線程服務(wù)器的常用編程模型》。
CountDownLatch 的使用樣例見(jiàn) test/BlockingQueue_test.cc
git 下載地址: http://github.com/chenshuo/recipes
瀏覽源代碼: http://github.com/chenshuo/recipes/tree/master/thread/
這個(gè)庫(kù)在 Debian Squeeze 和 Ubuntu 10.04 LTS 下編譯測(cè)試通過(guò),適用于 x86 和 x86-64 平臺(tái)。