Threads
Introdução
Até o final da década de 70, os sistemas operacionais mais populares, como Tops-10 (DEC), MVS (IBM) e Unix (Bell), suportavam apenas processos, sem threads. Em 1979, durante, o desenvolvimento do sistema operacional Toth, foi introduzido o conceito de processos lightweight (peso leve), onde o espaço de endereçamento de um processo poderia ser compartilhado por vários programas.
Apesar do conceito revolucionário, a idéia não foi aceita comercialmente e somente em meados de 1980, com o desenvolvimento do sistema operacional Mach, na Universidade de Carnegie Mellon, ficou clara a separação entre o conceito de processo e threads. Atualmente, o mesmo conceito pode ser encontrado em sistemas operacionais, como OS/2 (IBM), Solaris (Sun) e Windows NT (Microsoft), dentre outros.
Thread ou linha de execução é uma das maneiras utilizadas por um processo para dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente, em geral, em arquiteturas multiprocessadas. O suporte à thread é fornecido pelo próprio sistema operacional (SO), no caso da Kernel-Level Thread (KLT), ou implementada através de uma biblioteca de uma determinada linguagem, no caso de uma User-Level Thread (ULT).
Threads são conhecidas como processos leves. Basicamente, esse atributo se deve ao menor tempo gasto em atividades de criação e escalonamento de threads, se comparadas aos processos. O compartilhamento de memória entre as threads maximiza o uso dos espaços de endereçamento e torna mais eficiente o uso destes dispositivos.
Como todas os threads tem exatamente o mesmo espaço de endereçamento, eles também compartilham as mesmas variáveis globais. Assim, como cada thread pode acessar qualquer posição de memória dentro do espaço de endereçamento do processo, é possível a um thread ler, escrever ou até apagar informações usadas por outra thread. Não existe um meio de proteção para isso, fica sob responsabilidade do usuário este cuidado já que