线程池需要考虑

来源:互联网 发布:unix高级编程视频教程 编辑:程序博客网 时间:2024/05/22 00:33
线程池需要考虑:
1. 添加工作任务
2. 查询工作任务是不是完成, wait/done/cannel_if
3. 结束/等/强杀 任务池
2指的是 对每一个工作任务的执行
如果再增强点就可以hook工作时间

服务器可以用来测试每一个任务的工作统计



 用户线程池主要有几个目的, 
添加任务,并可以等这个处理的处理结果,
定时的查询这个任务执行怎么样了,
手动清除了一个任务,
停止任务池时是否等所有加入队列的任务执行完 

#ifndef RPC_THREADPOOL_H#define RPC_THREADPOOL_Htypedef struct rpc_tp rpc_tp_t;typedef struct rpc_tp_worker rpc_tp_worker_t;typedef void (* rpc_tp_complete_cb)(rpc_tp_worker_t * worker, void * opaque);typedef void * (* rpc_tp_process_cb)(void * opaque);typedef enum rpc_tp_state{tp_state_idle = 0,tp_state_busy,tp_state_complete,tp_state_invalid,} rpc_tp_state;typedef enum rpc_tp_kill{tp_kill_immediate,tp_kill_wait} rpc_tp_kill;#ifdef __cplusplusextern "C" {#endifrpc_tp_t * rpc_tp_create(int nthreads);rpc_tp_worker_t * rpc_tp_worker_add(rpc_tp_t * pool, rpc_tp_process_cb process_cb, void * opaque, rpc_tp_complete_cb complete_cb);rpc_tp_state rpc_tp_worker_touch(rpc_tp_worker_t * worker);void * rpc_tp_worker_wait(rpc_tp_worker_t * worker);void rpc_tp_worker_free(rpc_tp_worker_t * worker);void rpc_tp_destroy(rpc_tp_t * pool, rpc_tp_kill type);#ifdef __cplusplus}#endif#endif

#include "rpc_threadpool.h"void * process_cb(void * opaque){int taskid;taskid = (int)opaque;printf("taskid = %d.\n", taskid);Sleep(2000);return NULL;}void complete_cb(rpc_tp_worker_t * worker){rpc_tp_worker_free(worker);}int main(){rpc_tp_t * pool;pool = rpc_tp_create(5);{rpc_tp_process_cb pcb;rpc_tp_complete_cb ccb;void * opaque;int tasks;pcb = process_cb;ccb = complete_cb;for (tasks = 0; tasks < 19; tasks++){rpc_tp_worker_t * worker;rpc_tp_state state;void * result;opaque = (void *)tasks;worker = rpc_tp_worker_add(pool, pcb, opaque, ccb);state = rpc_tp_worker_touch(worker);result = NULL;//result = rpc_tp_worker_wait(worker);}rpc_tp_destroy(pool, tp_kill_wait);printf("destory ok.\n");}}



喜欢技术交流,不喜欢索要免费啤酒的,实现细节可以讨论

原创粉丝点击