Threads em C#
Um thread é uma sequência de instruções que vão ser executadas num programa. No ambiente UNIX, os threads encontram-se dentro de um processo, utilizando os recursos desse processo. Um processo pode ter vários threads.
Pode-se dizer que um thread é um procedimento que é executado dentro de um processo de uma forma independente. Para melhor perceber a estrutura de um thread é útil entender o relacionamento entre um processo e um thread. Um processo é criado pelo sistema operativo e podem conter informações relacionadas com os recursos do programa e o estado de execução do programa:
1. Process ID, process group ID, group ID
2. Ambiente
3. Directoria de trabalho
4. Instruções do programa
5. Registos
6. Pilha (Stack)
7. Espaço de endereçamento comum, dados e memória
8. Descritores de ficheiros
9. Comunicação entre processos (pipes, semáforos, memória partilhada, filas de mensagens)
Os threads utilizam os recursos de um processo, sendo também capazes de ser escalonados pelo sistema operativo e serem executados como entidades independentes dentro de um processo.
Um thread pode conter um controlo de fluxo independente e ser escalonável, porque mantêm o seu próprio:
1. Pilha
2. Propriedades de escalonamento
3. Dados específicos do thread
Um processo pode ter vários threads, partilhando cada um os recursos do processo e são executados no mesmo espaço de endereçamento. Com vários threads, temos em qualquer instante vários pontos de execução.
Como os threads partilham os recursos de um processo:
1. as alterações feitas por um thread num recurso partilhado (ex: fechar um ficheiro) serão "vistaa" pelos outros threads.
2. Dois apontadores com o mesmo valor, apontam para os mesmos dados.
3. É possível ler e escrever nas mesmas posições de memória, sendo por isso necessária uma sincronização explícita que tem de ser feita pelo programador.
Todos os threads estão no mesmo nível hierárquico. Um thread não mantém uma lista dos