Programação Paralela Paralelismo por Software • É um programa com capacidade de dividir tarefas em pequenas partes e executá-las em paralelo. – Threads – Processos Filhos (folk) Threads • Com os processadores de alto desempenho, veio a oportunidade de poder executar vários fluxos de execução de um mesmo processo. • Thread é um fluxo de execução dentro de um processo. • Um Processo consistem em um ambiente de execução, contendo uma ou mais threads. Threads • Múltiplas threads executam concorrentemente em um processo, mesma idéia a múltiplos processos executando concorrentemente em um único processador. • Threads pertencentes a um mesmo processo, compartilham os mesmos recursos e memória do processo. Suporte a Threads • O sistema operacional oferece suporte as threads em nível de kernel, KLT (Kernel-Level Thread). • Threads podem ser implementadas através de bibliotecas especificas em determinadas linguagens ULT (User-Level Thread). KLT (Kernel-Level Thread) ULT (User-Level Thread). Processos no Windows • ALT + SHIFT + ESC Threads em C • Linux, Solaris (Unix) – Pthread.h • Windows – Process.h – Windows.h Windows.h • MessageBox – Gera uma caixa de mensagem no programa. • CreateThread – Utilizada para criar uma thread. • SuspendThread – Pausa a execução de uma thread. • ResumeThread – Reinicia a execução de uma thread pausada. • TerminateThread – Termina uma thread. • WaitForSingleObject – Espera a execução de um objeto. • CloseHandle – Finaliza o identificador para a thread TIPOS DOS DADOS • DWORD - Ponteiro para um objeto. • WINAPI - Ponteiro para um argumento da api windows. • HANDLE - Identificador para um objeto. • LPVOID - Equivalente a void* MessageBox(HWND,LPCTSTR,LPCTSTR,UINT) • • • • HWND – Proprietário da janela. LPCTSTR – Mensagem na janela. LPCTSTR – Titulo da janela. UINT – Comportamento da janela. MessageBox(0,“Conteúdo",“Título",0); Int msg1 = MessageBox(NULL,“Opção ?",”Titulo",MB_YESNO + MB_ICONQUESTION); CreateThread(ThreadAtt,StackSize,Addr_Funcao,argumento,flags,ThreadId); • ThreadAtt – Ponteiro para estruturas de Threads, 0 para atributos padrões. • StackSize – Tamanho de inicialização da pilha, 0 tamanho padrão. • Addr_Funcao – Função de execução da thread. • Argumento – Argumento opcional para a função. • Flags – Comportamento da Thread após ser criada, 0 a thread é executada. • ThreadId – Ponteiro do tipo DWORD referente a identificação da Thread. • Retorna um HANDLE para a thread. SuspendThread(HANDLE ) • HANDLE – Thread que deverá ser suspensa. • Retorna 0 se a thread foi interrompida e -1 caso não foi possível interromper a thread. ResumeThread(HANDLE) • HANDLE – Thread que deverá ser reiniciada. • Retorna 0 se a thread foi reiniciada e -1 caso não foi possível reiniciar a thread. TerminateThread(HANDLE,DWORD) • HANDLE – Thread que devera ser finalizada. • DWORD – Código de saída, 0 sucesso e 1 erro. • Retorna 0 para thread finalizada e qualquer valor diferente de 0 se a thread não for finalizada. WaitForSingleObject(HANDLE,DWORD) • HANDLE – Thread que devera ser monitorado sua execução. • DWORD – Tempo em milissegundos que o programa devera aguardar. – INFINITE , tempo indeterminado. CloseHandle(HANDLE ) • HANDLE – Handle que devera ser finalizada.