c++线程池实现方法线程池实现方法
本文实例讲述了c++线程池实现方法。分享给大家供大家参考。具体分析如下:
下面这个线程池是我在工作中用到过的,原理还是建立一个任务队列,让多个线程互斥的在队列中取出任务,然后执行,显
然,队列是要加锁的
环境:ubuntu linux
文件名:locker.h
#ifndef LOCKER_H_
#define LOCKER_H_
#include "pthread.h"
class locker
{
public:
locker();
virtual ~locker();
bool lock();
void unlock();
private:
pthread_mutex_t m_mutex;
};
#endif /* LOCKER_H_ */
文件名:locker.cpp
#include "locker.h"
locker::locker()
{
pthread_mutex_init(&m_mutex, 0);
}
locker::~locker()
{
pthread_mutex_destroy(&m_mutex);
}
bool locker::lock()
{
if(0 == pthread_mutex_lock(&m_mutex))
return true;
return false;
}
void locker::unlock()
{
pthread_mutex_unlock(&m_mutex);
}
文件名:task_list.h
#ifndef TASK_LIST_H_
#define TASK_LIST_H_
#include "list"
#include "locker.h"
#include "netinet/in.h"
#include "semaphore.h"
using namespace std;
typedef void* (*THREAD_FUNC)(void*);
// 线程池中运行的任务,对于下行任务,sin中包含目的地址信息
// parm0指向发出数据的对象,parm1指向数据,parm2为数据的长度
typedef struct
{
THREAD_FUNC func;
void* parm0;
void* parm1;
void* parm2;
} task_info;
typedef list<task_info*> TASK_LIST;
typedef list<task_info*>::iterator PTASK_LIST;
class task_list
{
public:
task_list();
virtual ~task_list();
void append_task(task_info* tsk);