一个简单的linux线程池
線程池:簡單地說,線程池 就是預先創建好一批線程,方便、快速地處理收到的業務。比起傳統的到來一個任務,即時創建一個線程來處理,節省了線程的創建和回收的開銷,響應更快,效率更高。
?
在linux中,使用的是posix線程庫,首先介紹幾個常用的函數:
1 線程的創建和取消函數
pthread_create
創建線程
pthread_join
合并線程
pthread_cancel
取消線程
2 線程同步函數
pthread_mutex_lock
pthread_mutex_unlock
pthread_cond_signal
pthread_cond_wait
?
關于函數的詳細說明,參考man手冊
?
線程池的實現:
線程池的實現主要分為三部分,線程的創建、添加任務到線程池中、工作線程從任務隊列中取出任務進行處理。
主要有兩個類來實現,CTask,CThreadPool
/**
執行任務的類,設置任務數據并執行
**/
?
任務類是個虛類,所有的任務要從CTask類中繼承 ,實現run接口,run接口中需要實現的就是具體解析任務的邏輯。m_ptrData是指向任務數據的指針,可以是簡單數據類型,也可以是自定義的復雜數據類型。
?
線程池類
/**
線程池
**/
?
當線程池對象創建后,啟動一批線程,并把所有的線程放入空閑列表中,當有任務到達時,某一個線程取出任務并進行處理。
線程之間的同步用線程鎖和條件變量。
這個類的對外接口有兩個:
AddTask函數把任務添加到線程池的任務列表中,并通知線程進行處理。當任務到到時,把任務放入m_vecTaskList任務列表中,并用pthread_cond_signal喚醒一個線程進行處理。
StopAll函數停止所有的線程
?
Cpp代碼???
總結
以上是生活随笔為你收集整理的一个简单的linux线程池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux C++线程池
- 下一篇: linux 其他常用命令