多執行緒III 執行緒池

2021-10-22 07:03:57 字數 2579 閱讀 7512

執行緒池

那麼,**怎麼去實現呢?

#include

#include

#include

#include

//定義了handler

//handler的型別是函式指著型別

//然後就可以去定義變數了

//所定義出來的變數的型別其實就是函式指標型別變數

//返回值為void型別為int的引數都是符合條件的

typedef

void

(*handler)

(int);

//我們首先需要給出佇列中元素的類

class queuedata

//析構函式

//不用做什麼事情

//也沒有什麼記憶體需要去釋放,所以就什麼也不做了

~queuedata()

//備註是掉的**其實也可以完成我我們所希望完成的功能

//但是呼叫的介面太多了,使用起來有些麻煩

//所以我們不採用這種方式來進行使用

#if 0

handler gethanler()

intgetdata()

handler get

(int

* data)

#endif

//在這個函式中,用我們自己的成員變數去初始化我們的資料其實就是可以的

void

run(

)

private:

//執行緒池裡面

//應該首先先含有乙個變數

//然後含有對這個變數的處理方式

int data_;

//給出函式入口處的位址

handler handler_;};

//寫完上面的類之後,資料型別可以首先告一段落

class threadpool

~threadpool()

//因為是執行緒來進行pop的操作的

//但是現在還沒有執行緒,所以我們要給出執行緒池中線程的初始化的操作

intoninit()

}//如果建立執行緒成功的話,那麼我就返回0就好了

//建立執行緒失敗的話,就在上面的位置返回1

return0;

}int

push

(queuedata* qd)

que_.

push

(qd)

;pthread_mutex_unlock

(&lock_)

;pthread_cond_signal

(&cons_cond_)

;return0;

}void

threadexit()

private:

void

pop(queuedata*

* qd)

//因為這是類傳遞過來的成員函式,所以說是一定要加上static的

static

void

*poolstart

(void

* arg)

//pos 3 pcb等待佇列 ==> no

pthread_cond_wait

(&tp->cons_cond_,

&tp->lock_);}

//pos 4 ==> no

queuedata* qd;

tp->

pop(

&qd)

;pthread_mutex_unlock

(&tp->lock_)

;//pos 5 ==> no

qd->

run();

delete qd;}}

private:

//對於執行緒池我們首先需要考慮的就是執行緒安全佇列

std:

:queue> que_;

size_t capacity_;

//互斥鎖和條件變數

//這個鎖是用來對佇列進行保護的

pthread_mutex_t lock_;

//但是其實我們可以讓主線成來充當生產線程

//可以去讓主線程進行push的操作

//那麼,其實我們現在就可以不需要生產線程了,畢竟執行緒池所要解決的問題其實也是如何去消費執行緒的問題

//pthread_cond_t prod_cond_;

pthread_cond_t cons_cond_;

//執行緒的數量個數

//應該要告訴出來你到底有多少個執行緒

int thread_count_;

int flag;};

void

dealdata

(int data)

intmain()

int ret = tp->

oninit()

;if(ret <0)

for(

int i =

0; i <

100; i++

) tp->

push

(qd);}

sleep(10

);tp->

threadexit()

; delete tp;

return0;

}

多執行緒 執行緒池

第一 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。第二 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。第三 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配 調優和監控...

多執行緒 執行緒池

執行緒池是什麼 執行緒池 thread pool 是一種基於池化思想管理執行緒的工具,經常出現在多執行緒伺服器中,如mysql。執行緒過多會帶來額外的開銷,其中包括建立銷毀執行緒的開銷 排程執行緒的開銷等等,同時也降低了計算機的整體效能。執行緒池維護多個執行緒,等待監督管理者分配可併發執行的任務。這...

多執行緒 執行緒池

執行緒池的作用 減少了每次建立 銷毀執行緒所帶來的損耗。執行緒池建立執行緒的簡易流程 文字描述 1 先判斷核心執行緒池 corepoolsize 是否已滿,沒滿就建立核心執行緒執行,滿了就進行下一判斷。2 判斷等待佇列 workqueue 是否已經滿了,沒滿就新增到等待佇列,滿了就進行下一判斷。3 ...