a.boost執行緒池實現
參考自: boost庫實現執行緒池例項
原理:使用boost的thread_group儲存多個執行緒,使用bind方法將要處理的函式轉換成執行緒可呼叫的函式進行執行;使用佇列儲存待處理任務,利用mutex實現佇列執行緒安全。
#ifndef mythreadpool_h#define mythreadpool_h#include
#include
#include
#include
#include
#include
using
namespace
boost;
typedef boost::function
mytask;
//任務佇列--noncopyable
class
mytaskqueue : boost::noncopyable
mytask pop_task()
//指向佇列首部
mytask task(m_taskqueue.front());
//出佇列
m_taskqueue.pop();
return
task;
}intget_size()
};class
mythreadpool : boost::noncopyable
}public
: mythreadpool(
int num):m_threadnum(num),is_run(false)//
初始化列表
~mythreadpool()
void
init()
}//停止執行緒池
void
stop()
//新增任務
void addnewtask(const mytask&task)
void
wait()
};typedef
void (*pfuncallback)(int
i);void callbackfun(int
i)void procfun(int
ti,pfuncallback callback)
if(callback !=null)callback(ti);
}void callbackfun2(int
i)int procfun2(int&ti)
return
ti;}
void
testthreadpool()
tp.init();
//等待執行緒池處理完成!
tp.wait();
}#endif
b.基於執行緒的非同步呼叫實現
//建立乙個執行緒,執行耗時操作,等到操作完成,呼叫**函式
void testasynccall(int
i,pfuncallback callfun)
void testasynccall2(int
i)template
class
mytask2
mytask2(procfun proc,callbackfun callback):m_procfun(proc),m_callbackfun(callback)
~mytask2()
void run(paratype¶)
}};void testasynccall3(int para)//
使用bind註冊執行函式和**函式
boost建立執行緒池 boost庫使用 執行緒類
boost 庫中提供了兩種建立執行緒的方式,一種是單個執行緒建立,另外一種是執行緒組的建立,進行執行緒管理 thread 就是沒有組管理,與我們在linux下使用pthread create 函式是一樣的,只是在c 11中,引入了boost中的thread方法 包含標頭檔案 include usin...
記憶體池 程序池 執行緒池介紹及執行緒池C 實現
平常我們使用new malloc在堆區申請一塊記憶體,但由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,造成不好管理與浪費的情況。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊...
C C 學習 之執行緒池原理及實現
目前的大多數網路伺服器,包括web伺服器 email伺服器以及資料庫伺服器等都具有乙個共同點,就是單位時間內必須處理數目巨大的連線請求,但處理時間卻相對較短。傳統多執行緒方案中我們採用的伺服器模型則是一旦接受到請求之後,即建立乙個新的執行緒,由該執行緒執行任務。任務執行完畢後,執行緒退出,這就是是 ...