c++執行緒池,繼承cdoit,實現其中的start和end
標頭檔案/*
* 多執行緒管理類
* */
#ifndef cthreadpoolmanage_h
#define cthreadpoolmanage_h
#include
#include
#include
#include
#include
#include
#include
#define usleep_time 100
#define check_time 1
using namespace std;
class cdoit
; virtual int end(){};};
程式設計客棧class cthreadpoolmanage
//pthread_mutex_t mtx=pthread_mutex_initializer;
pthread_cond_t cond=pthread_cond_initializer;
bool isbusy; //是否空閒
bool doflag;
//time_t begintime; //執行緒不工作開始時間
pthread_t cthreadpid; //執行緒id
pthread_attr_t cthreadattr; //執行緒屬性
cdoit * doit; //任務類
void * value; //需要傳遞的值
}; //執行緒函式
static void* startthread(void*);
//任務佇列鎖
pthread_mutex_t _duty_mutex;
//任務佇列
list _dutylist;
//執行緒佇列鎖
pthread_mutex_t _thread_mutex;
//執行緒佇列
list _threadlist;
///初始化,建立最小個數執行緒///
void initthread();
///任務分配執行緒///
static void* taskallocation(void*arg);
pthread_t tasktpid;
///執行緒銷毀、狀態檢查執行緒///
static void* checkthread(void* arg);
pthread_t checktpid;
bool checkrun;
//執行緒異常退出清理
static void threadcleanup(void* arg); //
int addthread(list *plist,threadinfo* ptinfo);
public:
cthreadpoolmanage();
/*保留的最少執行緒,最多執行緒數,空閒多久銷毀,保留幾個執行緒的冗餘
*/cthreadpoolmanage(int min,int max,int waitsec);
~cthreadpoolmanage();
int start();
//任務注入器
int putduty(cdoit *,void *);
int getnowthreadnum(); };
#endif // cthreadpoolmanage_h
cpp檔案
/** 執行緒池,執行緒管理類
* */
#include "cthreadpoolmanage.h"
cthreadpoolmanage::cthreadpoolmanage()
cthreadpoolmanage::cthreadpoolmanage(int min, int max, int waitsec)
cthreadpoolmanage::~cthreadpoolmanage()
void cthreadpoolmanage::threadcleanup(void* arg)
void* cthreadpoolmanage::startthread(void* arg)
//0正常執行到這兒不執行清理函式,異常會執行
pthread_cleanup_pop(0);
pthread_attr_destroy (&tinfo->cthreadattr);
delete tinfo;
cout《程式設計客棧age::initthread()}
int cthreadpoolmanage::addthread(std::list< cthreadpoolmanwkmpgage::threadinfo* >* plist, cthreadpoolmanage::threadinfo* ptinfo)
void* cthreadpoolmanage::taskallocation(void*arg)
if(!ptinfotmp->isbusy)
pthread_mutex_unlock(&ptinfotmp->mtx);
}if(a_1)else
delete ptinfo;
}else
}pthread_mutex_unlock(&ptmanage->_duty_mutex);
pthread_mutex_unlock(&ptmanage->_thread_mutex);
usleep(usleep_time);
} return 0;}
void* cthreadpoolmanage::checkthread(void* arg)
for(list::iterator itorti2 = ptmanage->_threadlist.begin();itorti2!=ptmanage->_threadlist.end();)
time(&nowtime);
if(ptinfo->isbusy == false && nowtime-ptinfo->begintime>ptmanage->_waitsec)
else
pthread_mutex_unlock(&ptinfo->mtx);
} pthread_mutex_unlock(&ptmanage->_thread_mutex); }}
int cthreadpoolmanage::start()
請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支援!
本文標題: c++實現簡單的執行緒池
本文位址:
c 實現簡單的執行緒池
執行緒池,先建立一定數目的執行緒,初始都處於空閒狀態。當有新的任務進來,從執行緒池中取出乙個空閒的執行緒處理任務,處理完成之後,該執行緒被重新放回到執行緒池中。當執行緒池中的執行緒都在處理任務時,若有新的任務產生,只能等待,直到執行緒池中有執行緒結束任務空閒才能執行。用c 實現固定執行緒數的執行緒池...
C 簡單執行緒池實現
執行緒池,簡單來說就是有一堆已經建立好的執行緒 最大數目一定 初始時他們都處於空閒狀態,當有新的任務進來,從執行緒池中取出乙個空閒的執行緒處理任務,然後當任務處理完成之後,該執行緒被重新放回到執行緒池中,供其他的任務使用,當執行緒池中的執行緒都在處理任務時,就沒有空閒執行緒供使用,此時,若有新的任務...
c 簡單執行緒池實現
boost threadpool參考 執行緒池,簡單來說就是有一堆已經建立好的執行緒 最大數目一定 初始時他們都處於空閒狀態,當有新的任務進來,從執行緒池中取出乙個空閒的執行緒處理任務,然後當任務處理完成之後,該執行緒被重新放回到執行緒池中,供其他的任務使用,當執行緒池中的執行緒都在處理任務時,就沒...