#include#include#include#include#include/**線程池里所有">
LINUXC線程池

LINUXC線程池

ID:37863298

大?。?4.39 KB

頁(yè)數(shù):6頁(yè)

時(shí)間:2019-06-01

LINUXC線程池_第1頁(yè)
LINUXC線程池_第2頁(yè)
LINUXC線程池_第3頁(yè)
LINUXC線程池_第4頁(yè)
LINUXC線程池_第5頁(yè)
資源描述:

《LINUXC線程池》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、#include#include#include#include#include#include/**線程池里所有運(yùn)行和等待的任務(wù)都是一個(gè)CThread_worker*由于所有任務(wù)都在鏈表里,所以是一個(gè)鏈表結(jié)構(gòu)*/typedefstructworker{/*回調(diào)函數(shù),任務(wù)運(yùn)行時(shí)會(huì)調(diào)用此函數(shù),注意也可聲明成其它形式*/void*(*process)(void*arg);void*arg;/*回調(diào)函數(shù)的

2、參數(shù)*/structworker*next;}CThread_worker;/*線程池結(jié)構(gòu)*/typedefstruct{pthread_mutex_tqueue_lock;pthread_cond_tqueue_ready;/*鏈表結(jié)構(gòu),線程池中所有等待任務(wù)*/CThread_worker*queue_head;/*是否銷毀線程池*/intshutdown;pthread_t*threadid;/*線程池中允許的活動(dòng)線程數(shù)目*/intmax_thread_num;/*當(dāng)前等待隊(duì)列的任務(wù)數(shù)目*/intcur_queue_s

3、ize;}CThread_pool;intpool_add_worker(void*(*process)(void*arg),void*arg);void*thread_routine(void*arg);staticCThread_pool*pool=NULL;voidpool_init(intmax_thread_num)//初始化線程池{pool=(CThread_pool*)malloc(sizeof(CThread_pool));pthread_mutex_init(&(pool->queue_lock),NUL

4、L);pthread_cond_init(&(pool->queue_ready),NULL);//?pool->queue_head=NULL;pool->max_thread_num=max_thread_num;pool->cur_queue_size=0;pool->shutdown=0;pool->threadid=(pthread_t*)malloc(max_thread_num*sizeof(pthread_t));inti=0;for(i=0;i

5、eate(&(pool->threadid[i]),NULL,thread_routine,NULL);}}/*向線程池中加入任務(wù)*/intpool_add_worker(void*(*process)(void*arg),void*arg){/*構(gòu)造一個(gè)新任務(wù)*/CThread_worker*newworker=(CThread_worker*)malloc(sizeof(CThread_worker));newworker->process=process;newworker->arg=arg;newworker->n

6、ext=NULL;/*別忘置空*/pthread_mutex_lock(&(pool->queue_lock));/*將任務(wù)加入到等待隊(duì)列中*/CThread_worker*member=pool->queue_head;if(member!=NULL){while(member->next!=NULL)member=member->next;member->next=newworker;}else{pool->queue_head=newworker;}assert(pool->queue_head!=NULL);poo

7、l->cur_queue_size++;pthread_mutex_unlock(&(pool->queue_lock));/*好了,等待隊(duì)列中有任務(wù)了,喚醒一個(gè)等待線程;注意如果所有線程都在忙碌,這句沒(méi)有任何作用*/pthread_cond_signal(&(pool->queue_ready));return0;}/*銷毀線程池,等待隊(duì)列中的任務(wù)不會(huì)再被執(zhí)行,但是正在運(yùn)行的線程會(huì)一直把任務(wù)運(yùn)行完后再退出*/intpool_destroy(){if(pool->shutdown)return-1;/*防止兩次調(diào)用*/po

8、ol->shutdown=1;/*喚醒所有等待線程,線程池要銷毀了*/pthread_cond_broadcast(&(pool->queue_ready));/*阻塞等待線程退出,否則就成僵尸了*/inti;for(i=0;imax_thread_num;i++)pthread_join

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。