#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. | |
ThreadTree * | buildThreadTree () |
Cria nova árvore sem vértices. | |
ThreadVertex * | buildThreadVertex (void *task, void *data) |
Cria um novo vértice para árvore, com id=-1, com as listas vazias. | |
ThreadVertexLinkedList * | buildThreadVertexLinkedList () |
Cria uma nova lista ligada simples para armazenar os vértices do grafo utilizado para representar threadtree. | |
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. | |
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. | |
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. | |
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. |
Definição no arquivo threadtree.h.
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
int addThreadVertex | ( | ThreadTree ** | refThreadTree, | |
ThreadVertex ** | refThreadVertex | |||
) |
Adiciona um vértice (ThreadVertex) à árvore de threads e atribui ao vértice o id sequencial.
[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. |
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.
[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. |
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.
[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. |
int appendThreadVertexNode | ( | ThreadVertexLinkedList ** | refList, | |
ThreadVertex * | vertex | |||
) |
Acrescenta um ThreadVertexNode no final da lista ligada.
[out] | refList | Lista na qual deve ser acrescentado o node. |
[in] | vertex | ThreadVertexNode que deve ser acrescentado. |
ThreadTree* buildThreadTree | ( | ) |
Cria nova árvore sem vértices.
ThreadVertex* buildThreadVertex | ( | void * | task, | |
void * | data | |||
) |
Cria um novo vértice para árvore, com id=-1, com as listas vazias.
[in] | task | Ponteiro para a função a ser executada. |
[in] | data | Dados para a função que será executada. |
ThreadVertexLinkedList* buildThreadVertexLinkedList | ( | ) |
Cria uma nova lista ligada simples para armazenar os vértices do grafo utilizado para representar threadtree.
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.
[in] | vertex | ThreadVertex que será armazenado no node a ser criado. |
[in] | next | Ponteiro para o próximo node da lista ligada. |
void createThreadTreeIndex | ( | ThreadTree ** | refThreadTree | ) |
Indexa a lista de vértices para acelerar a busca. Método invocado internamente, Não deve ser invocado explicitamente.
[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.
[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.
[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.
[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.
[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.
[out] | refNode | Node da lista que deve ser destruído. |
void dumpThreadTree | ( | ThreadTree * | threadtree | ) |
Dump no stdout do conteúdo da árvore de threads.
[in] | threadtree | ThreadTree da qual se deseja fazer o dump. |
void dumpThreadVertexLinkedList | ( | ThreadVertexLinkedList * | list | ) |
Dump de uma lista de vértices.
[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.
[out] | refThreadTree | Referência à árvore que deve ser executada |
int getStatus | ( | ThreadVertex * | vertex | ) |
Retorna o estado atual da thread armazenada no vértice.
[in] | vertex | Vétice que contém a thread. |
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.
[out] | refThreadTree | Referência para a árvore do qual se deseja obter o vértice. |
[in] | n | Número do elemento que se deseja. |
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.
[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.
[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.
[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.
[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.
[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.
[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.
[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.
[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.
[out] | threadtree | ThreadTree do qual se deseja saber o número de nós. |