码迷,mamicode.com
首页 > 编程语言 > 详细

Linux C++线程池

时间:2015-06-29 11:35:56      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

1、为什么需要线程池?

部分应用程序需要执行很多细小的任务,对于每个任务都创建一个线程来完成,任务完成后销毁线程,而这就会产生一个问题:当执行的任务所需要的时间T1小于等于创建线程时间T2和销毁线程时间T3总和时即T1 <= T2 + T3,应用处理任务的响应能力会大大减弱,从而影响了应用程序性能,为了解决这类问题,线程池技术提供了很好的解决方案。线程池顾名思义就是把线程资源池化,在应用启动时一次性创建合适数量的线程,当需要执行任务时就从线程池中分配一个已经创建好的线程来执行,执行完在把线程归还,只在应用停时再一次性销毁所有的线程。

2、线程池的基本组成部分

一个简单的线程池至少包括下列的组成部分:

1)线程池管理器(ThreadPool):用于创建一个线程池对象并管理线程池,如分配任务给某个空闲线程,查看当前线程状态等等的操作。

2)工作线程(WorkThread):线程池中线程,可能是挂起,可能是被分配了任务,若然是挂起,则用一个信号量去阻塞直到有任务分配。

3)任务接口(Task):每个任务必须实行的接口,以供工作线程调度任务执行。

3、Unix下的线程池实现

将给大家展示的线程池实现的类如下,含有比较多的面向对象设计思想。
主要是
一个线程池管理多个工作线程类,每个工作线程类对象管理一个线程。

 

1)Mutex:互斥量类,里面只有一个pthread_mutex_t的私有成员,对POSIX互斥量进行封装,后面用于线程池的队列和栈。

Mutex.h

 1 #ifndef MUTEX_H
 2 #define MUTEX_H
 3 
 4 #include <iostream>
 5 #include <pthread.h>
 6 using namespace std;
 7 
 8 class Mutex
 9 {
10 public:
11     Mutex();
12     void Lock();
13     void Unlock();
14 
15 private:
16     pthread_mutex_t mutex;
17 };
18 
19 #endif

Linux C++线程池

标签:

原文地址:http://www.cnblogs.com/lewiskyo/p/4607040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!