Referência do Arquivo threadtree.h

ThreadTree (Árvore de Threads) para executar processamento em paralelo. Mais...

#include <pthread.h>

Gráfico de dependência de inclusões para threadtree.h:

Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com este arquivo:

Vá para o código-fonte deste arquivo.

Componentes

struct  struct_ThreadTree
struct  struct_ThreadVertex
struct  struct_ThreadVertexLinkedList
struct  struct_ThreadVertexNode

Definições e Macros

#define THREAD_FINISHED   2
 Thread foi concluída. Para executá-la novamente é necessária colocá-la no estado READY.
#define THREAD_READY   0
 Thread está pronta para ser executada. Para executar uma thread ela NECESSARIAMENTE deve estar no estado READY.
#define THREAD_RUNNING   1
 Thread está em execução.

Definições de Tipos

typedef struct_ThreadTree ThreadTree
typedef struct_ThreadVertex ThreadVertex
typedef struct_ThreadVertexLinkedList ThreadVertexLinkedList
typedef struct_ThreadVertexNode ThreadVertexNode

Funções

int addThreadVertex (ThreadTree **refThreadTree, ThreadVertex **refThreadVertex)
 Adiciona um vértice (ThreadVertex) à árvore de threads e atribui ao vértice o id sequencial.
int addTreeArc (ThreadTree **refThreadTree, ThreadVertex **refParent, ThreadVertex **refChild)
 Define um arco, necessariamente direcional, entre dois vértices. O arco é direcional pois estamos lidando com uma árvore.
int addTreeArcByIds (ThreadTree **refThreadTree, int idParent, int idChild)
 Define um arco, necessariamente direcional, entre dois vértices. O arco é direcional pois estamos lidando com uma árvore.
int appendThreadVertexNode (ThreadVertexLinkedList **refList, ThreadVertex *vertex)
 Acrescenta um ThreadVertexNode no final da lista ligada.
ThreadTreebuildThreadTree ()
 Cria nova árvore sem vértices.
ThreadVertexbuildThreadVertex (void *task, void *data)
 Cria um novo vértice para árvore, com id=-1, com as listas vazias.
ThreadVertexLinkedListbuildThreadVertexLinkedList ()
 Cria uma nova lista ligada simples para armazenar os vértices do grafo utilizado para representar threadtree.
ThreadVertexNodebuildThreadVertexNode (ThreadVertex *vertex, ThreadVertexNode *next)
 Cria um novo node da lista ligada de vértices que irá armazenar o ThreadVertex passado como parâmetro.
void createThreadTreeIndex (ThreadTree **refThreadTree)
 Indexa a lista de vértices para acelerar a busca. Método invocado internamente, Não deve ser invocado explicitamente.
void destroyThreadTree (ThreadTree **refThreadTree)
 Destrói a árvore e desaloca a memória.
void destroyThreadTreeIndex (ThreadTree **refThreadTree)
 Desaloca e destrói o index da árvore de threads.
void destroyThreadVertex (ThreadVertex **refThreadVertex)
 Destrói o vértice e desaloca a memória.
void destroyThreadVertexLinkedList (ThreadVertexLinkedList **refList)
 Destroy uma lista ligada simples.
void destroyThreadVertexNode (ThreadVertexNode **refNode)
 Destrói um node da lista de vértices. ATENÇÃO: Considerando que o ThreadVertex pertence à ThreadTree e não à lista de vértice, que é apenas uma estrutura auxiliar, a destruição a lista NÃO desaloca os, vértices, os mesmos serão desalocados quando a árvore for destruído.
void dumpThreadTree (ThreadTree *threadtree)
 Dump no stdout do conteúdo da árvore de threads.
void dumpThreadVertexLinkedList (ThreadVertexLinkedList *list)
 Dump de uma lista de vértices.
void execute (ThreadTree **refThreadTree)
 Inicia a execução de uma árvore de threads em um processo em paralelo, ou seja, a invocação desta função não boqueia a execução do program (ou da thread que a invocoua) que continua a ser executado. A aplicação deve necessariamente definir as threads como THREAD_READY.
int getStatus (ThreadVertex *vertex)
 Retorna o estado atual da thread armazenada no vértice.
ThreadVertexgetThreadVertex (ThreadTree **refThreadTree, int n)
 Retorna o n-ésimo vértice da árvore. Os ids atríbuidos automaticamente aos vértices ao adicioná-los à árvore são sequenciais.
void join (ThreadVertex **refVertex)
 Join de um ThreadVertex, ou seja, da thread que esta estrutura de dados representa internamente.
void joinDescendants (ThreadVertex **refVertex)
 Join de todos os descendentes (filhos) de um ThreadVertex.
void joinThreadTree (ThreadTree **refThreadTree)
 Join da árvore como um todo.
void restart (ThreadTree **refThreadTree)
 RE-Inicia a execução de uma árvore de threads em um processo em paralelo, ou seja, a invocação desta função não boqueia a execução do program (ou da thread que a invocoua) que continua a ser executado. Igual execute(), mas automaticamente define o status das threads como THREAD_READY.
int run (ThreadVertex **refVertex)
 Executa uma thread, ou seja, a função que foi atribuída ao ThreadVertex com os dados armazenados no mesmo. A invocação desta função não boqueia a execução do programa (ou da thread que a invocou) que continua a ser executado.
void setRoot (ThreadTree **refThreadTree, ThreadVertex *root)
 Define o root da árvore informando diretamente o ThreadVertex.
void setRootById (ThreadTree **refThreadTree, int rootId)
 Define o root da árvore pelo id do ThreadVertex.
void setStatus (ThreadVertex **refVertex, int status)
 Define um estado para a thread.
int sizeThreadTree (ThreadTree *threadtree)
 Retorna o número de vértices da threadtree.


Descrição Detalhada

ThreadTree (Árvore de Threads) para executar processamento em paralelo.

Autor:
Ernesto Colla (ernesto@gmail.com)
Versão:
0.0.1
Data:
Abril/2007
Implementação genérica de uma árvore de threads que executa funções genéricas em paralelo. O vértice pai é executado apenas após os vértices filhos terem sido executados, ou seja, o pai faz um join dos filhos. A raiz é o último vértice a ser eliminado. É responsabilidade do programador garantir que o código será threadsafe. A biblioteca de threadtree não faz nenhuma checagem consistência das estruturas de dados compartilhadas durante a execução do processo. O desenvolvedor deve invocar explicitamente apenas as funções para criar/destruir/inserir a própria ThreadTree e os ThreadVertex as funções que lidam com as estruturas internas como a lista ligada, os nodes da mesma e a indexação são gerenciados pela própria biblioteca e não devem ser invocados diretamente.

Definição no arquivo threadtree.h.


Definições dos tipos

typedef struct struct_ThreadTree ThreadTree

Árvore de Threads

typedef struct struct_ThreadVertex ThreadVertex

Vértice de um grafo que contém ponteiros para a função que irá executar bem como as para estruturas de dados necessárias

typedef struct struct_ThreadVertexLinkedList ThreadVertexLinkedList

Single Linked List de nodes contendo ThreadVertex

typedef struct struct_ThreadVertexNode ThreadVertexNode

ThreadVertexNode de uma lista ligada utilizado para armazenar o ThreadVertex em uma lista ligada


Funções

int addThreadVertex ( ThreadTree **  refThreadTree,
ThreadVertex **  refThreadVertex 
)

Adiciona um vértice (ThreadVertex) à árvore de threads e atribui ao vértice o id sequencial.

Parâmetros:
[out] refThreadTree Referência para a árvore no qual o vértice será adicionado.
[out] refThreadVertex Referência para o vértice a ser adicionado.
Retorna:
Id sequencial para do vértice adicionado.

int addTreeArc ( ThreadTree **  refThreadTree,
ThreadVertex **  refParent,
ThreadVertex **  refChild 
)

Define um arco, necessariamente direcional, entre dois vértices. O arco é direcional pois estamos lidando com uma árvore.

Parâmetros:
[out] refThreadTree Referência à árvore na qual será adicionado o arco.
[in] refParent Referência para o vértice que é a origem do arco.
[in] refChild Referência para o vértice que é o destino do arco.
Retorna:
Números de filhos do parent, que corresponde ao número de arcos que tem origem no vértice parent.

int addTreeArcByIds ( ThreadTree **  refThreadTree,
int  idParent,
int  idChild 
)

Define um arco, necessariamente direcional, entre dois vértices. O arco é direcional pois estamos lidando com uma árvore.

Parâmetros:
[out] refThreadTree Referência à árvore na qual será adicionado o arco.
[in] idParent Id do vértice que é a origem do arco.
[in] idChild Id do vértice que é o destino do arco.
Retorna:
Números de filhos do parent, que corresponde ao número de arcos que tem origem no vértice parent.

int appendThreadVertexNode ( ThreadVertexLinkedList **  refList,
ThreadVertex vertex 
)

Acrescenta um ThreadVertexNode no final da lista ligada.

Parâmetros:
[out] refList Lista na qual deve ser acrescentado o node.
[in] vertex ThreadVertexNode que deve ser acrescentado.
Retorna:
Posição na lista do node inserido.

ThreadTree* buildThreadTree (  ) 

Cria nova árvore sem vértices.

Retorna:
Ponteiro para a árvore de threads criada.

ThreadVertex* buildThreadVertex ( void *  task,
void *  data 
)

Cria um novo vértice para árvore, com id=-1, com as listas vazias.

Parâmetros:
[in] task Ponteiro para a função a ser executada.
[in] data Dados para a função que será executada.
Retorna:
Ponteiro para o vértice recém criado.

ThreadVertexLinkedList* buildThreadVertexLinkedList (  ) 

Cria uma nova lista ligada simples para armazenar os vértices do grafo utilizado para representar threadtree.

Retorna:
Ponteiro para uma lista ligada.

ThreadVertexNode* buildThreadVertexNode ( ThreadVertex vertex,
ThreadVertexNode next 
)

Cria um novo node da lista ligada de vértices que irá armazenar o ThreadVertex passado como parâmetro.

Parâmetros:
[in] vertex ThreadVertex que será armazenado no node a ser criado.
[in] next Ponteiro para o próximo node da lista ligada.
Retorna:
Ponteiro para um novo node da lista ligada de vértices

void createThreadTreeIndex ( ThreadTree **  refThreadTree  ) 

Indexa a lista de vértices para acelerar a busca. Método invocado internamente, Não deve ser invocado explicitamente.

Parâmetros:
[out] refThreadTree Referência para a árvore que será indexado.

void destroyThreadTree ( ThreadTree **  refThreadTree  ) 

Destrói a árvore e desaloca a memória.

Para liberar os recursos alocados para a threadtree basta invocar a função destroyThreadTree. As demais funções para desalocar o index, a lista ligada de vértices, os repectivos nodes e os próprios vértices serão invocadas no momento da destruição da árvore.

Parâmetros:
[out] refThreadTree Referência para a árvore que será destruída.

void destroyThreadTreeIndex ( ThreadTree **  refThreadTree  ) 

Desaloca e destrói o index da árvore de threads.

Para liberar os recursos alocados para a threadtree basta invocar a função destroyThreadTree. As demais funções para desalocar o index, a lista ligada de vértices, os repectivos nodes e os próprios vértices serão invocadas no momento da destruição da árvore.

Parâmetros:
[out] refThreadTree Referência para a árvore que será des-indexada.

void destroyThreadVertex ( ThreadVertex **  refThreadVertex  ) 

Destrói o vértice e desaloca a memória.

Para liberar os recursos alocados para a threadtree basta invocar a função destroyThreadTree. As demais funções para desalocar o index, a lista ligada de vértices, os repectivos nodes e os próprios vértices serão invocadas no momento da destruição da árvore.

Parâmetros:
[out] refThreadVertex Referência para o vértice que será destruído.

void destroyThreadVertexLinkedList ( ThreadVertexLinkedList **  refList  ) 

Destroy uma lista ligada simples.

Para liberar os recursos alocados para a threadtree basta invocar a função destroyThreadTree. As demais funções para desalocar o index, a lista ligada de vértices, os repectivos nodes e os próprios vértices serão invocadas no momento da destruição da árvore. ATENÇÃO: Considerando que o ThreadVertex pertence ao grafo e não à lista de vértice, que é apenas uma estrutura auxiliar, a destruição a lista NÃO desaloca os, vértices, os mesmos serão desalocados quando a árvore for destruído.

Parâmetros:
[out] refList Referência à lista que deve ser desalocada

void destroyThreadVertexNode ( ThreadVertexNode **  refNode  ) 

Destrói um node da lista de vértices. ATENÇÃO: Considerando que o ThreadVertex pertence à ThreadTree e não à lista de vértice, que é apenas uma estrutura auxiliar, a destruição a lista NÃO desaloca os, vértices, os mesmos serão desalocados quando a árvore for destruído.

Parâmetros:
[out] refNode Node da lista que deve ser destruído.

void dumpThreadTree ( ThreadTree threadtree  ) 

Dump no stdout do conteúdo da árvore de threads.

Parâmetros:
[in] threadtree ThreadTree da qual se deseja fazer o dump.

void dumpThreadVertexLinkedList ( ThreadVertexLinkedList list  ) 

Dump de uma lista de vértices.

Parâmetros:
[in] list Lista da qual se deseja o dump

void execute ( ThreadTree **  refThreadTree  ) 

Inicia a execução de uma árvore de threads em um processo em paralelo, ou seja, a invocação desta função não boqueia a execução do program (ou da thread que a invocoua) que continua a ser executado. A aplicação deve necessariamente definir as threads como THREAD_READY.

Parâmetros:
[out] refThreadTree Referência à árvore que deve ser executada

int getStatus ( ThreadVertex vertex  ) 

Retorna o estado atual da thread armazenada no vértice.

Parâmetros:
[in] vertex Vétice que contém a thread.
Retorna:
Estado corrente da ThreadVertex. Estados possíveis: READY, RUNNING E FINISHED.

ThreadVertex* getThreadVertex ( ThreadTree **  refThreadTree,
int  n 
)

Retorna o n-ésimo vértice da árvore. Os ids atríbuidos automaticamente aos vértices ao adicioná-los à árvore são sequenciais.

Parâmetros:
[out] refThreadTree Referência para a árvore do qual se deseja obter o vértice.
[in] n Número do elemento que se deseja.
Retorna:
n-ésimo vétice ou null se não houver vértice.

void join ( ThreadVertex **  refVertex  ) 

Join de um ThreadVertex, ou seja, da thread que esta estrutura de dados representa internamente.

A invocação desta função bloqueia a execução do programa, ou da thread que a invocou, até que a thread aguardada seja concluída. Esta função é utilizada internamente pelas funções joinDescendants e joinThreadTree.

Parâmetros:
[out] refVertex Referência ao vértice da thread que deve ser aguardada.

void joinDescendants ( ThreadVertex **  refVertex  ) 

Join de todos os descendentes (filhos) de um ThreadVertex.

A invocação desta função bloqueia a execução do programa, ou da thread que a invocou, até que a todos os descendentes tenham sido concluídos.

Parâmetros:
[out] refVertex Referência ao vértice do qual a execução dos descendentes deve ser aguardada.

void joinThreadTree ( ThreadTree **  refThreadTree  ) 

Join da árvore como um todo.

A invocação desta função bloqueia a execução do programa, ou da thread que a invocou, até que a execução de todos os vértices tenha sido concluída, ou seja, é equivalente a aguardar a execução dos descendentes da raiz da árvore.

Parâmetros:
[out] refThreadTree Referência para a árvore de threads.

void restart ( ThreadTree **  refThreadTree  ) 

RE-Inicia a execução de uma árvore de threads em um processo em paralelo, ou seja, a invocação desta função não boqueia a execução do program (ou da thread que a invocoua) que continua a ser executado. Igual execute(), mas automaticamente define o status das threads como THREAD_READY.

Parâmetros:
[out] refThreadTree Referência à árvore que deve ser executada

int run ( ThreadVertex **  refVertex  ) 

Executa uma thread, ou seja, a função que foi atribuída ao ThreadVertex com os dados armazenados no mesmo. A invocação desta função não boqueia a execução do programa (ou da thread que a invocou) que continua a ser executado.

ATENÇÃO: Para ser executado o ThreadVertex deve estar com o estado READY. Ao iniciar a execução o ThreadVertex passa para o estado RUNNING e ao concluí-la passa para o estado FINISHED.

Parâmetros:
[out] refVertex Referência ao vertex da thread que deve ser executada.

void setRoot ( ThreadTree **  refThreadTree,
ThreadVertex root 
)

Define o root da árvore informando diretamente o ThreadVertex.

Caso não seja atribuído explicitamente pelo desenvolvedor, a biblioteca, se necessário, tenta descobrir automaticamente a raiz, ou seja, o node com parent = null. Na quase totalidade dos casos não há necessidade e não é recomendavel que o desenvolvedor defina explicitamente o raiz, deixando esta tarefa para a biblioteca.

Parâmetros:
[out] refThreadTree Referência à árvore que deve ser executada.
[in] root node root.

void setRootById ( ThreadTree **  refThreadTree,
int  rootId 
)

Define o root da árvore pelo id do ThreadVertex.

Caso não seja atribuído explicitamente pelo desenvolvedor, a biblioteca, se necessário, tenta descobrir automaticamente a raiz, ou seja, o node com parent = null. Na quase totalidade dos casos não há necessidade e não é recomendavel que o desenvolvedor defina explicitamente o raiz, deixando esta tarefa para a biblioteca.

Parâmetros:
[out] refThreadTree Referência à árvore que deve ser executada
[in] rootId Id do node root

void setStatus ( ThreadVertex **  refVertex,
int  status 
)

Define um estado para a thread.

ATENÇÃO: Para ser executado o ThreadVertex deve estar com o estado READY. Ao iniciar a execução o ThreadVertex passa para o estado RUNNING e ao concluí-la passa para o estado FINISHED.

Parâmetros:
[out] refVertex Referência ao vertex da thread.
[in] status Estado a ser definido para o ThreadVertex. Estados possíveis: READY, RUNNING E FINISHED.

int sizeThreadTree ( ThreadTree threadtree  ) 

Retorna o número de vértices da threadtree.

Parâmetros:
[out] threadtree ThreadTree do qual se deseja saber o número de nós.
Retorna:
número de vértices da ThreadTree.


Gerado em Fri Feb 15 19:50:41 2008 para IME-Dissertação por  doxygen 1.5.1