Introdução à Threads para Windows na linguagem C

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

TIPOS ABSTRATOS DE DADOS
Programação em Java Prof. Maurício Braga
Programação Orientada a Objetos*
Java e OO – Isso é só um roteiro de aula
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Listas duplamente encadeadas
Prof. Thiago Pereira Rique
PThreads MO801/MC972.
SSC SISTEMAS OPERACIONAIS I
SSC SISTEMAS OPERACIONAIS I
Programação Concorrente
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Paradigmas da Programação – Semestre 1 – Aula 3
Linguagem C Funções.
Vetores, Matrizes e Funções
Slides: Prof. João Fabro UTFPR - Curitiba
Classes e objetos P. O. O. Prof. Grace.
CRIANDO OBJETOS EM JAVA
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
JAVA: Conceitos Iniciais
Concorrência em Java Threads em Java.
Programação Orientada a Objetos com Java
Concorrência em Java Threads em Java.
Concorrência em Java Threads em Java.
Aula prática 13 Orientação a Objetos – C++ Parte 1
JAVA Linguagem Ambiente de Desenvolvimento
Desenvolvimento de Sistemas Orientados a Aspectos
Programação II Estruturas de Dados Aula 02 - continuação
Programação I Aula 2 (Métodos)
Métodos de Construção de Software: Orientação a Objetos
Linguagem de Programação JAVA
Java Avançado Luiz Carlos d´Oleron SJCP Java Sockets.
Conceitos de J2EE para a WEB
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Programação orientada a objectos em C++
Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aula 9 Regiane Kawasaki
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Programação Paralela.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Wagner Santos C. de Jesus
Orientação a Objetos Parte II
Programação com Threads
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Introdução às Java Threads
Aula Prática 4 Monitoria IP/CC (~if669).
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Aula Prática 3 Funções Monitoria Introdução à Programação.
Introdução a Programação Orientada a Objetos
Aula Prática 13 Orientação a Objeto Monitoria
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
Bruno Affonso Diego Chiquito Ruan Berté.   O código de Escalonamento no Windows é implementado no Kernel.  A rotina que desempenha as tarefas do Escalonador.
Capítulo 8 Threads.
Manipulação de Imagens em OpenGL
Módulo II Capítulo 1: Orientação a Objetos
 é uma iniciativa da Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações.  Todo e qualquer código gerado.
Infra-Estrutura de Comunicação (IF678) Aula Prática 03 – CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Processos, Threads e Sincronização em Windows NT Alisson Felipe Coelho Garcia Lucas Mateus Malaquias Rogerio Junio Leachenski.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
ProgramaçãoConcorrente Glêdson Elias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Introdução à Threads para Windows na linguagem C
Transcrição da apresentação:

Introdução à Threads para Windows na linguagem C Modularizando Threads em uma struct C Luiz Carlos d´Oleron lcadb@cin.ufpe.br

Introdução Nesta aula aprenderemos: Como usar Threads na Linguagem C; Como criar um conjunto de artefatos que ocultem a complexidade do Sistema Operacional para programação multi-thread em C.

Motivação Gerenciamento de Threads e Processos é algo intrissecamente ligado ao Sistema Operacional Programas que utilizam técnicas Multi-Thread podem ter código nativo do SO espalhado e misturado com outros tipos de código (negócio, persistência, etc…) API de SO´s não são muito legíveis

Exemplo Excemplo1.c

Modularizando o código Nas linguagens Orientadas a Objetos, tal como Java e C++, existem Classes que encapsulam as responsabilidades do Thread e do Sistema Operacional Essas Classes permitem Reuso, ao passo que podem ser Estendidas Em C, as coisas são um pouco mais difíceis, pois não possuímos algumas ferramentas valiosas, como Herança e Polimorfismo!

Classe Thread de Java Dando uma olhada na classe Thread de Java: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html

Modularizando o código A idéia principal é criar uma struct em C que, junto com algumas funções, se pareça um pouco com a classe Thread de java Dessa forma, poderemos reutilizar a struct em nossas aplicações, ocultando nela os detalhes do Sistema Operacional Como?

A struct Thread typedef struct thread{ //um identificador para o Thread char* nome; //a funcao que deverá ser executada pelo Thread EnderecoFuncao* run; //um manipulador para o Thread //Utilizado, por exemplo, para saber se o Thread //ainda está vivo HANDLE handle; } Thread;

Funções para a struct //Construtor do Thread Thread* newThread(char* nome, EnderecoFuncao* funcaoThread); //funcao start inicia a execução do Thread em //paralelo com a execução atual void start(Thread* t, void* parametros);

Funções para a struct //funcao faz o Thread atual dormir por no //mínimo tempoEmMiliSegundos void sleep(int tempoEmMiliSegundos); //Faz a Thread atual aguardar pela conclusão do // Thread t void join(Thread* t); //Faz o Thread atual abdicar pela sua parcela atual // de tempo na CPU void yield();

Ops!!! Mais na classe Thread de java, run é um método, e não um atributo!

Explicando Em C, não há Herança. Para solucionar isso, usaremos algo que não é possível ser feito em java Definimos um Ponteiro para uma Função Assim nossa Thread em C poderá ser extensível, mesmo sem herança

Usando a struct Thread void funcaoSoma (void* param){ int i = 0; char* nome = (char*) param; for(i = 0;i<10;i++){ printf("%s : %d \n",nome,i); yield(); } void funcaoSub (void* param){ for(i = 9;i>=0;i--){

Usando a struct Thread int main(int argc, char *argv[]) { Thread* t1 = newThread(“ThreadSoma", funcaoSoma ); Thread* t2 = newThread(“ThreadSub", funcaoSub ); start(t1, t1->nome); start(t2, t2->nome); join(t1);//Aguarda t1 join(t2);//Aguarda t2 system("PAUSE"); }

Exemplo com struct Thread O mesmo exemplo do slide 4 pode ser encontrado no Exemplo2.c, dessa vez, usando a struct Thread

A implementação A implementação das funções de Thread.h podem ser encontradas na classe Thread.c Lá estão isolados os detalhes do acesso ao Sistema Operacional

A implementação Foram utilizadas as seguintes funções da API do Windows: CreateThread GetExitCodeThread Sleep

A função CreateThread Cria uma Thread para executar em paralelo no processo que a chamou; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );

A função CreateThread Exemplo de chamada de CreateThread: void funcao(void* p){...} ... char* parametros = “teste”; HANDLE handle = CreateThread(NULL,0, funcao, parametros,0,NULL);

A função CreateThread Para simplificar, daremos ênfase apenas aos parâmetros: lpStartAddress – a função que será executada pelo Thread lpParameter – Parâmetro que será passado para a função do Thread

A função GetExitCodeThread Retorna o código de saída da Thread, usada para descobrir se o Thread já acabou de executar sua função; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getexitcodethread.asp BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpExitCode );

A função GetExitCodeThread Exemplo de uso de GetExitCodeThread: HANDLE handle = …; LPDWORD exitCode; GetExitCodeThread(handle,&exitCode); if(exitCode==STILL_ACTIVE){ printf(“Thread ainda Funcionando”); }else{ printf(“Thread Morto”); }

A função GetExitCodeThread hThread– O “manipulador” da Thread. Componente que permite obter informações do ciclo de vida da Thread lpExitCode– Parâmetro que contém o código de saída do Thread. Se o Thread ainda estiver executando, lpExitCode será igual a STILL_ACTIVE

A função Sleep Similar ao método estático sleep da classe Java, a função Sleep fará a Thread atual adormecer por, no mínimo, o tempo especificado; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp VOID Sleep( DWORD dwMilliseconds );

A função Sleep Passar o valor zero para Sleep faz com que o Thread atual abdique de seu tempo na CPU, deixando para o SO decidir por um novo Thread a executar. Se nenhum outro Thread estiver disponível, a função retorna automaticamente, fazendo com que o Thread inicial volte à exeução; Usamos Sleep(0) para simular a função void yield().

A função Sleep Exemplo de uso de Sleep int tempo = 10000; printf(“Fazendo o programa parar por no mínimo %d milisegundos\n”, tempo); Sleep(tempo); printf(“O programa parou por no mínimo %d milisegundos\n”, tempo);

Resumo Código que usar Thread em C irá depender do Sistema Operacional Podemos usar structs e funções para modularizar e abstrair o código dependente do Sistema Operacional Assim o restante do código ficará mais limpo e flexível

Mais informações Muita coisa sobre Threads não foram vistas nessa aula O exemplo apresentado poderá ser estendido, por exemplo, para contemplar sincronização e prioridades Procure mais informações nas fontes: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/multiple_threads.asp http://www.cin.ufpe.br/~adsl/cursos