Modularidade

Os programas são muitas vezes modelados como um número de partes distintas interagindo entre si para produzir um resultado ou serviço desejado.

Um programa pode ser implementado como uma entidade única e complexa que desempenha múltiplas funções entre as diferentes partes do programa. Uma solução mais simples consiste na implementação de várias entidades, cada entidade realizando uma parte do programa e compartilhando recursos com outras entidades.

Ao utilizar várias entidades, um programa pode ser separado de acordo com suas atividades distintas, cada uma tendo uma entidade associada. Essas entidades não têm que saber nada sobre as outras partes do programa, exceto quando trocam informações. Nesses casos, eles devem sincronizar uns com os outros para garantir a integridade dos dados.

As threads são entidades bem adaptadas para programação modular. Threads fornecem compartilhamento de dados simples (todas as threads dentro de um processo compartilham o mesmo espaço de endereço) e poderosas instalações de sincronização, tais como mutexes (bloqueios de exclusão mútua) e variáveis de condição.