Linux C 实现线程池
最近做的一些工作需要用到线程池技术,因此参考了一些资料和书籍,如《0bug c/c++商用工程之道》。
为此在linux平台上用纯c写了一个线程池的实现。
在此列出了原代码。
主要用到的数据结构有
1.struct thread_pool_t // thread pool 的实现代码
2.struct thread_pool_token_t //在thread pool 中用到的结构,一个该类型变量代表一条线程
3.struct thread_pool_job_t //当线前程处理该任务将回调结构
设计思路:
主线程创建线程池的控制线程,
管理线程将进入循环来做以下事情:
1.如果当前空闲进程不足并且总线程数没有达到上限,将创建一条空闲线程,至道空闲线程达到3条(见THREAD_POOL_MIN_IDLE_SIZE)
2.不断检查工作任务队列,有则安排一条空闲线程对该任务进行处理
普通线程被管理线程创建后也将进入循环来做以下事情:
1.检查当前assign的thread_pool_token_t结构的状态,如果是TREAD_POOL_STATE_BUSY则调用thread_pool_token_t所注册的回调函数来处理任务。
2.完成该任务后检测当前空闲进程够不够,如果太多则退出本线程,否则会改写运行状态为TREAD_POOL_STATE_IDLE后继续循环
注册任务:
1.当没有空闲线程可用时将把该任务加入工作任务队列(需定义_THREAD_POOL_JOB_LIST_),以备将来有空闲线程是能够进行处理。
主要文件 :
1.thread_pool.h
#ifndef _LIB_DOL_THREAD_POOL_H_
#define _LIB_DOL_THREAD_POOL_H_
#include "thread_pool.def"
#include <pthread.h>
#define THREAD_POOL_MIN_SIZE 5 /* at least 5 threads, 4 job + 1 manage thread */
#define THREAD_POOL_MIN_IDLE_SIZE 3 /* at least 3 threads idle to improve the efficiency */
#define THREAD_POOL_DEFAULT_SIZE 10 /* default threads in thread pool */
#define THREAD_POOL_MAX_SIZE 100 /* max threads in thread pool */
#define TREAD_POOL_STATE_NOTRUN 0
#define TREAD_POOL_STATE_IDLE 1
#define TREAD_POOL_STATE_BUSY 2
#define TREAD_POOL_REG_OK 0
#define
相关文档:
2009 年 4 月 23 日
本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。
背景
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微 ......
简介
Basic 是使用的最广泛的、最简单的编程语言之一,尤其是对于新手。 迄今为止,最常用的 Basic 开发环境是 Microsoft 的 Visual Basic 集成开发环境。 近来,Linux 的使用范围已经延伸到了桌面环境。从最初的仅限于服务器应用,使得人都是领导者,它正在变成一个客户端计算机的操作系统,满足了类似阅读电子邮件、上网 ......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
pid_t pid=fork()
it has 3 situation for the return result pid
0 child
>0 parent process
<0 fork fail
fork create a new process and it parent live alse when the child process had been created ......
在此摘录C编译时出现的警告信息的意义。
1) warning: ISO C90 forbids mixed declarations and code
C语言是面向过程的语言,这个警告通常表示声明应该在其他代码的前面。
2) warning: initialization from incompatible pointer type
在Linux kernel中有许多callback函数,这个警告表明callback函数的实现中,或者返 ......