自己胡亂寫的乙個執行緒池

2022-02-23 16:25:19 字數 2032 閱讀 2738

昨天看了下執行緒池,雖然原理什麼都比較好理解,但是實現起來感覺自己的方法還是非常笨。這裡沒直接把任務也做了乙個池,就不用動態的分配操作了。下面是**以及測試:

#include 

#include

#include

#include

#include

#include

#define max_thread_num 100

#define max_work_num 1000

struct gwork;

struct gthread_pool;

void list_add(int item, int *head, gthread_pool *pool);

int list_delete(int *head, gthread_pool *pool);

void* gwork_func(void *arg)else

pthread_mutex_unlock(&(pool->glock));

printf("

work %d is running.\n

", item);

//begin running.

(pool->works[item].func)(pool->works[item].arg);

printf("

work %d has finished.\n

", item);

pthread_mutex_lock(&(pool->glock));

list_add(item, &pool->free_head, pool);

pool->running--;

pthread_mutex_unlock(&(pool->glock));}}

}//add an item from list.

inline void list_add(int item, int *head, gthread_pool* pool)

//delete an item from list.

inline int list_delete(int *head, gthread_pool* pool)

gthread_pool* gthread_pool_create()

pool->free_head = max_work_num-1;

pool->wait_head = -1;

pool->running = 0;

for(i = 0; i < max_thread_num; i++)

}pool->flags = 0; //

running.

printf("

creat pool success.\n

");return pool;

}int gthread_pool_add(gthread_pool* pool, gwork work)

pthread_mutex_lock(&(pool->glock));

if(pool->free_head >= 0 && pool->flags == 0)else

pthread_mutex_unlock(&(pool->glock));

return item;

}int gthread_pool_destroy(gthread_pool* pool)

free(pool);

printf("

gthread_pool_destroy success.\n

");return

0;}

下面是測試用的**:

#include "

thread_pool.h

"gthread_pool *pool;

void work_func(void *arg)

int main()

gthread_pool_destroy(pool);

return

0;}

這個做法太笨了,再看看其他人是怎麼做的,過幾天重新寫乙個。

歡迎拍磚。

執行緒池(一) 實現乙個簡單的執行緒池

我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...

實現乙個執行緒池

一.執行緒最主要的三個同步機制 1.訊號量 2.互斥鎖 3.條件變數 二.對三個同步機制分別實現乙個包裝類 ifdef locker h define locker h include include 訊號量的封裝 class sem sem bool wait bool post private ...

乙個簡單的執行緒池

話說這個執行緒池也寫了好久了 做簡單的東西的時候也在用,最近因為乙個失誤刪掉了自己的一些檔案導致重新寫了一遍 所以貼出來,以防萬一 並且跟大佬們交流 created by cxhmyself on 18 4 10.include 都需要與互斥量一起才能工作 include include inclu...