乙個簡單執行緒池的實現 C語言

2021-07-22 19:53:25 字數 1898 閱讀 8859

本文的**實現了乙個簡單的執行緒池,並利用c/s模型將客戶端所傳送的資料進行簡單的計算。

我是這麼理解的,池是電腦科學中一種典型的機制,如stl裡面的記憶體池,資料庫連線池,還有程序池或執行緒池。這些池建立的目的都是為了避免頻繁系統呼叫所帶來的開銷。我們這樣想,如果我們事先轉備好一大塊所需要的記憶體,或者執行緒,以後我們要用到時就直接拿來用就好了。不夠的話再執行其他解決方案。

在本文**中,定義了乙個執行緒池執行緒陣列,執行緒池水深(執行緒數)假定為5,這個值我們根據實際情況選擇。我們可以事先申請5個執行緒,讓他們在各自的執行緒執行函式內部迴圈,這就相當於block,但不是block。當我們需要線城時,直接拿來主義,讓該執行緒的work_state為busy態,這是全域性結構體變數,當檢測到此情況出現,執行緒run,這就是執行緒池的分配過程。

執行緒池**,將busy態改為idle態即可,繼續迴圈。

如果執行緒池不夠用,我對額外執行緒採用的機制是,來乙個申請乙個,走乙個銷毀乙個。

#pragma once

#include #include #include #include #include #include #include #include #include #include #include #include #define init_thread_num 5

#define maxline 1024

#define err_quit(m) \

dowhile(0)

typedef enumwork_state;

typedef enumoper_enum;

typedef struct oper_struct;

#include "../utili.h"

void math_operation(oper_struct *ptr, int *res);

static void* extra_thread_handler(void *arg);

static void* pool_thread_handler(void *arg);

bool find_idle_thread(int connfd);

typedef struct thread_extra thread_extra; //額外執行緒結構體

typedef struct thread_pool thread_pool; //執行緒池結構體

typedef thread_pool pool_array[init_thread_num]; //執行緒池執行緒陣列

pool_array pool;

int extra_num; //額外數目,用來計算額外線程式號

int main()

}

#include "../utili.h"

void input_opernum(oper_struct *pointer);

int main()

else if(strncmp(symbol, "sub", 3) == 0)

else if(strncmp(symbol, "mul", 3) == 0)

else if(strncmp(symbol, "div", 3) == 0)

else if(strncmp(symbol, "mod", 3) == 0)

else

send(sockfd, &ops, sizeof(ops), 0);

recv(sockfd, recvbuff, sizeof(int), 0);

printf("the answer is:>%d\n", *(int*)recvbuff);

} close(sockfd);

return 0;

}

*所有程式均經過驗證。

C 簡單執行緒池實現

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

c 簡單執行緒池實現

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

c 簡單執行緒池實現

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