TFCweb
1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
|
Implementació del patró ThreadPool. Més...
#include <ThreadPool.h>
Tipus Públics | |
typedef CuaConcurrent < tipus_tasca > | tipus_cua_tasques |
Tipus de la cua de tasques. | |
typedef boost::function< void(void)> | tipus_tasca |
Tipus de les tasques acceptades. |
Mètodes públics | |
ThreadPool (const size_t n_workers) | |
Construeix el ThreadPool amb n_workers fils. | |
virtual | ~ThreadPool () |
bool | es_oberta () const |
Comprova si s'ha tancat. | |
void | join () |
Bloca el fil actual fins que terminin totes les tasques. | |
size_t | num_tasques () const |
Obté el nombre de tasques pendents. | |
void | programa (tipus_tasca t) throw (ErrorThreadPoolTancada) |
Programa una tasca t . | |
void | tanca () |
Es deixen d'acceptar tasques. | |
void | termina () |
Cancel·la les tasques pendents. |
Mètodes Privats | |
void | inicia () |
Inicia els fils. |
Atributs Privats | |
volatile bool | marca_terminacio_ |
Indica als fils que han de finalitzar immediatament. | |
const size_t | n_threads_ |
Nombre de fils. | |
bool | tancada_ |
Indica si s'accepten noves tasques. | |
tipus_cua_tasques | tasques_ |
Tasques programades. | |
std::vector< boost::thread * > | threads_ |
Fils. |
Implementació del patró ThreadPool.
En aquesta implementació un ThreadPool controla un nombre fix de fils treballadors. Aquests processen tasques a mida que se n'afegeixen i romanen a l'espera si no hi ha cap tasca. Si hi ha més tasques que fils, les últimes en arrivar es quedaran en espera fins que algun dels fils treballadors finalitzi la tasca que estigui executant.
Les tasques han de ser cridables (p.e. funcions o objectes funció) que no requereixin arguments.
Definició a la línia 63 del fitxer ThreadPool.h.
typedef CuaConcurrent<tipus_tasca> tipus_cua_tasques |
Tipus de la cua de tasques.
Definició a la línia 67 del fitxer ThreadPool.h.
typedef boost::function<void (void)> tipus_tasca |
Tipus de les tasques acceptades.
Definició a la línia 66 del fitxer ThreadPool.h.
|
explicit |
Construeix el ThreadPool amb n_workers
fils.
n_workers | Nombre de fils a crear |
n_workers
fils s'han creat i estan executant-se a l'espera de tasques Definició a la línia 85 del fitxer ThreadPool.cc.
Referències ThreadPool::inicia().
|
virtual |
Definició a la línia 91 del fitxer ThreadPool.cc.
Referències ThreadPool::join(), ThreadPool::n_threads_, ThreadPool::termina() i ThreadPool::threads_.
|
inline |
Comprova si s'ha tancat.
Definició a la línia 95 del fitxer ThreadPool.h.
Referències ThreadPool::tancada_.
|
private |
Inicia els fils.
Definició a la línia 108 del fitxer ThreadPool.cc.
Referències ThreadPool::marca_terminacio_, ThreadPool::n_threads_, ThreadPool::tasques_ i ThreadPool::threads_.
Referenciat a ThreadPool::ThreadPool().
void join | ( | ) |
Bloca el fil actual fins que terminin totes les tasques.
Definició a la línia 119 del fitxer ThreadPool.cc.
Referències CuaConcurrent< T, TContenidor >::empty(), anonymous_namespace{ThreadPool.cc}::INTERVAL_POLLING, ThreadPool::marca_terminacio_, ThreadPool::tanca(), ThreadPool::tasques_, ThreadPool::termina() i ThreadPool::threads_.
Referenciat a ThreadPool::~ThreadPool().
|
inline |
Obté el nombre de tasques pendents.
Definició a la línia 111 del fitxer ThreadPool.h.
Referències CuaConcurrent< T, TContenidor >::size() i ThreadPool::tasques_.
void programa | ( | tipus_tasca | t | ) | throw (ErrorThreadPoolTancada) |
Programa una tasca t
.
ErrorThreadPoolTancada | Si s'intenta programar una tasca un cop s'ha tancat l'objecte |
t:
funció, objecte funció o objecte funció obtingut amb std::mem_fn
o boost::bind
per exemple. Definició a la línia 99 del fitxer ThreadPool.cc.
Referenciat a executa().
void tanca | ( | ) |
Es deixen d'acceptar tasques.
Definició a la línia 115 del fitxer ThreadPool.cc.
Referències ThreadPool::tancada_.
Referenciat a ThreadPool::join() i ThreadPool::termina().
void termina | ( | ) |
Cancel·la les tasques pendents.
Definició a la línia 132 del fitxer ThreadPool.cc.
Referències ThreadPool::marca_terminacio_ i ThreadPool::tanca().
Referenciat a executa(), ThreadPool::join(), signal_callback_posix() i ThreadPool::~ThreadPool().
|
private |
Indica als fils que han de finalitzar immediatament.
Definició a la línia 122 del fitxer ThreadPool.h.
Referenciat a ThreadPool::inicia(), ThreadPool::join() i ThreadPool::termina().
|
private |
Nombre de fils.
Definició a la línia 118 del fitxer ThreadPool.h.
Referenciat a ThreadPool::inicia() i ThreadPool::~ThreadPool().
|
private |
Indica si s'accepten noves tasques.
Definició a la línia 121 del fitxer ThreadPool.h.
Referenciat a ThreadPool::es_oberta() i ThreadPool::tanca().
|
private |
Tasques programades.
Definició a la línia 120 del fitxer ThreadPool.h.
Referenciat a ThreadPool::inicia(), ThreadPool::join() i ThreadPool::num_tasques().
|
private |
Fils.
Definició a la línia 119 del fitxer ThreadPool.h.
Referenciat a ThreadPool::inicia(), ThreadPool::join() i ThreadPool::~ThreadPool().