易截截图软件、单文件、免安装、纯绿色、仅160KB

主题:一个简单的linux线程池

线程池
:简单地说,线程池
就是预先创建好一批线程,方便、快速地处理收到的业务。比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率
更高。
在linux中,使用的是posix线程库,首先介绍几个常用的函数:
1 线程的创建和取消函数
pthread_create
创建
pthread_join
合并线程
pthread_cancel
取消线程
2 线程同步函数
pthread_mutex_lock
pthread_mutex_unlock
pthread_cond_signal
pthread_cond_wait
关于函数的详细说明,参考man手册
线程池的实现:
线程池的实现主要分为三部分,线程的创建、添加任务到线程池中、工作线程从任务队列中取出任务进行处理。
主要有两个类来实现,CTask,CThreadPool
/**
执行任务的类,设置任务数据并执行
**/
class CTask
{
protected:
string m_strTaskName; //任务的名称
void* m_ptrData; //要执行的任务的具体数据
public:
CTask(){}
CTask(string taskName)
{
this->m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run()= 0;
void SetData(void* data); //设置任务数据
};
任务类是个虚类,所有的任务要从CTask类中继承
,实现run接口,run接口中需要实现的就是具体解析任务的逻辑。m_ptrData是指向任务数据的指针,可以是简单数据类型,也可以是自定义的复杂
数据类型。
线程池类
/**
线程池
**/
class CThreadPool
{
private:
vector<CTask*> m_vecTaskList; //任务列表
int m_iThreadNum; //线程池中启动的线程数
static vector<pthread_t> m_vecIdleThread; //当前空闲的线程集合
static vector<pthread_t> m_vecBusyThread; //当前正在执行的线程集合
static pthread_mutex_t m_pthreadMutex; //线程同步锁
static pthread_cond_t m_pthreadCond; //线程同步的条件变量
protected:
static void* ThreadFunc(void * threadData); //新线程的线程函数
static int MoveToIdle(pthread_t tid); //线程执行结束后,把自己放入到空闲线程中
static int MoveToBusy(pthread_t tid); //移入到忙碌线程中去
int Create(); //创建所有的线程
public:
CThreadPool(int threadNum);
int AddTask(CTask *task); //把任务添加到线程池中
int StopAll(


相关文档:

Linux设备驱动之——构建内核树

学Linux一年多了,对驱动的知识一点都了解,上周买了本《Linux设备驱动》,O'REILLY出版,打算学习学习。学习过的大侠,希望可以指导指导。
首先下载Linux内核,按作者的说法,只要是linux-2.6.xxx的内核都可以,我的是linux-2.6.33.2。有位网友说下载后最好解压到/usr/src/目录下,解压
在构建内核树是参考了原书第四章& ......

linux修改mac地址

1)闭网卡设备
  /sbin/ifconfig eth0 down
2)修改MAC地址
  /sbin/ifconfig eth0 hw ether 00:50:56:C0:00:01
3)重启网卡
  /sbin/ifconfig eth0 up
通过ifconfig可以看到修改已经生效,可是重启机器后又恢复成了原来得mac.
要想永久修改MAC
在/etc/rc.d/rc.local里加上这三句(也可以在/etc/init.d/networ ......

LINUX安装JDK

Linux下jboss 5.1安装配置步骤
 
一、下载jboss 5.1和jdk1.6(我把他下载到/usr/local/src/tarbag)
jboss 5.1ZIP包 http://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA/
java jdk包      http://java.sun.com/javase/downloads/widget/jdk6.jsp
二、解压
#cd /usr/lo ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号