实现一个简单的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_pt
相关文档:
引用:http://blog.chinaunix.net/u/12207/showart_2061214.html
关于2.6.31遇到的问题
错误提示1:
drivers/built-in.o(.init.text+0x3bad): In function `con_init':
include/trace/events/kmem.h:47: undefined reference to `.L1452'
解决:
vi /usr/src/linux/drivers/char/vt.c 找到static int __init con_init ......
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define NTP_SERVER "clock.via.net"
#define ......
如何实现Linux与windows的文件传输?
2007年05月22日 星期二 20:54
一.概述
本文讲述了在Linux主机与windows主机之间如何互传文件的方法。因为有的时候,linux主机中的一些文件可能会在windows环境下用到。例如在linux主机中抓了一些图片,想把它们传到windows主机上以作为word文档的插图。又或者从Windows ......
切换到root用户下,
service iptables status 用于查看是否有开启防方墙.
service iptables stop 用于关闭防火墙.
service iptables start 用于打开防火墙.
防火墙的开启有时会限制外部访问服务器上的端口失败. ......