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