原理:
thread a = thread(theadproc,param);
執行緒構造以後,執行緒執行的函式就不能改變了,一旦函式執行結束,執行緒也就終止。
所以要實現執行緒不停的切換任務,就只能對param動手了。
讓param變成乙個裝有函式指標以及該函式執行所需引數的資料結構。
讓執行緒池和執行緒通過param引數來交換資料,分配任務。
1.函式指標。
**:
#include#includeusing namespace std;
int add(int a,int b)
int main()
;//簡單起見,就讓每個執行緒做一樣的任務
void print(int num)
using print = void(*)(int);
void threadtowork(work &work)
else
}}struct threadpool
{ queueq;//任務佇列,也沒有設定容量
thread xcarr[threa_num];//執行緒控制代碼陣列
work h**ework[threa_num];//每個執行緒的資料
確實是夠簡易的,不過好在只是簡單的列印還是足夠勝任了。
過於簡易,所以問題很多,建立的執行緒都還沒結束呢,主線程就完了。
還要分配任務的時候,修改了執行緒2的資料。但是可能釋放的訊號量給了執行緒3呢。
此外,都只能執行這一固定的列印任務,完全不能做其他活,因為寫死了只能print。
好在,簡單的列印完成了。說明思路是沒錯的。只是效率之類的問題還沒有考慮。看來執行緒池,關鍵就在於執行緒池如何與建立的執行緒進行通訊和交換資料了。
c 簡易執行緒池
以前做均衡負載的時候就想寫過執行緒池,那時候沒有很理解就沒寫,最近嘗試自己搭個高併發的小型伺服器,又學習了下執行緒池,但感覺網上的大多涉及的技術點比較多,對於初學者不容易理解,這裡我也分享下我自己寫的簡易執行緒池,除錯環境在ubuntu18.04。該執行緒池通過設定任務函式 搬運工 不斷地訪問等待佇...
簡易執行緒池實現
是其實也就是任務分發器,池子裡預先跑著n個執行緒,可以往池子裡提交任務。相對執行緒不斷建立和銷毀,特別對於大量的短時任務,執行緒池顯然是很節省資源的。直接上 include include include include include include typedef void job void d...
python手寫簡易執行緒池
bin env python coding utf 8 import queue import threading from contextlib import contextmanager import time 停止事件 stopevent object class threadpool obj...