c 實現簡單的執行緒池

2022-10-04 03:57:07 字數 3251 閱讀 3672

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參考 執行緒池,簡單來說就是有一堆已經建立好的執行緒 最大數目一定 初始時他們都處於空閒狀態,當有新的任務進來,從執行緒池中取出乙個空閒的執行緒處理任務,然後當任務處理完成之後,該執行緒被重新放回到執行緒池中,供其他的任務使用,當執行緒池中的執行緒都在處理任務時,就沒...