OO Engenharia Eletrônica



Documentos relacionados
OO Engenharia Eletrônica

Programação com Posix Threads

Sistemas Operacionais I

Programação de Sistemas

Procedimentos para Reinstalação do Sisloc

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

Procedimentos para Instalação do Sisloc

Orientação a Objetos Programação em C++

Pthreads. O que são threads? Mario João Junior. Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional.

Autoridade Certificadora Notarial CONFIGURAÇÃO DA MÁQUINA DA AR COM WINDOWS VISTA E WINDOWS 7 AC NOTARIAL. Página 1 de 14

Procedimentos para Instalação do SISLOC

possível até impedir o funcionamento do Windows. Faz-scuidado redobrado ao ativar determinados recursos.

Algoritmos e Programação Estruturada

COMO INSTALAR O CATÁLOGO

Portal do Senac: Área Exclusiva para Alunos Manual de Navegação e Operação

Cadastramento de Computadores. Manual do Usuário

Instruções para Instalação dos Utilitários Intel

DIF-e - MANUAL DE ORIENTAÇÃO AO CONTRIBUINTE

Introdução à Programação

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

BIT Atualização de Sistema Android 2.3 para Android 4.0

Sistemas Operacionais

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

Linguagem de Programação I

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

LINGUAGEM C UMA INTRODUÇÃO

Resumo da Matéria de Linguagem de Programação. Linguagem C

Manual de instalação e configuração da Ferramenta Android SDK

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Trabalho 3: Agenda de Tarefas

PROCESSOS. Prof. Maicon A. Sartin

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

MANUAL DE INSTALAÇÃO DO SISTEMA BDS PROPOSTA

Download e Instalação

Google Drive. Passos. Configurando o Google Drive

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

AVG Admin 2012 SQL Server 2005 Express

Sistemas Operacionais

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Programação Concorrente Processos e Threads

DCC 003 Algoritmos e Estruturas de Dados I Tutorial de instalação do GCC e do TextPad

ESTUDO DE CASO WINDOWS VISTA

Componentes da linguagem C++

Manual de Instalação ( Client / Server ) Versão 1.0

Instalando o Internet Information Services no Windows XP

Microsoft Lync Manual de Instalação e Uso

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Guia Sphinx: instalação, reposição e renovação

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

COMO INSTALAR ZIM 8.50 WINDOWS

SUAP Módulo Protocolo Manual do Usuário DTI DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO SEÇÃO DE PROJETOS, SISTEMAS E PROCESSOS DE NEGÓCIO

Instalação do VOL Backup para Desktops

Guia de Atualização TOTVS Segurança e Acesso 11.6

2 Um Primeiro Programa em C

Este tutorial está publicado originalmente em

GUIA INTEGRA SERVICES E STATUS MONITOR

Manual de Instalação

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Como instalar uma impressora?

Manual Administrador - Mídia System

Instalação do SisAlu 1. Apostila de Instalação do SisAlu

MANUAL DE CONFIGURAÇÃO DO BACKUP

Orientação a Objetos

Manual de Atualização Versão

"Manual de Acesso ao Moodle - Discente" 2014

Java Server Pages: Apresentação e Instalação

MULTIACERVO - VERSÃO 17.*

ANEXO 01 GUIA PASSO A PASSO

Oficina de Inclusão Tecnológica Windows Live Skydrive

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Uso do Action₀NET com o PI System da OsiSoft

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Instalação do ByYou ESB. Guia de Instalação e Atualização do ByYou ESB

Introdução à Linguagem C/C++ Parte I

MANUAL AGENDADOR DE TAREFAS LOGIX

Manual - Gemelo Backup Online WEB

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Considerações a serem feitas antes da implantação.

4 Estrutura do Sistema Operacional Kernel

Transcrição:

OO Engenharia Eletrônica - Programação em C/C++ Slides 18: Introdução à Multithreading. Introdução à Multithreading: execução concorrente de tarefas. Exemplos usando a biblioteca pthread que é de acordo com POSIX. Prof. Jean Marcelo SIMÃO

Multithreading: execução concorrente de tarefas Obs.: Material inicial elaborado por Murilo S. Holtman no 2o Semestre de 2007. O Holtman era então aluno da disciplina em questão e estagiário em projeto do Professor da disciplina.

Threads Thread é o nome dado a uma tarefa (e ao conjunto de estruturas associado a ela) que é executada concorrentemente com outras tarefas. São amplamente utilizadas por todo tipo de software: servidores, browsers, jogos, programas que efetuam cálculos e pesquisas demoradas, entre muitos outros.

Implementações de execução concorrente Em modelos e sistemas operacionais mais antigos, era comum o uso das chamadas user-level threads (threads implementadas pelos próprios aplicativos). A maioria dos sistemas operacionais modernos suporta a execução de múltiplas tarefas gerenciadas pelo próprio kernel, que lida com sua alocação, destruição e agendamento.

Nova thread Espera Nova thread Linha principal

Problemas no uso de threads O principal problema em programas com várias linhas de execução paralelas diz respeito à sincronização no acesso a recursos compartilhados (blocos de memória, arquivos, dispositivos, etc.) por várias tarefas. Estes problemas são circundados ao se escrever código seguro (thread-safe) que inclui a utilização de rotinas reentrantes e objetos de sincronização (como semáforos e mutexes).

Exemplo de conflito entre threads que acessam um mesmo recurso Tarefa da thread 1: Tarefa da thread 2:... char *s; for (s = ABCDEF ;; *s!= \0 ;; s++) fputc(*s, stdout);...... char *s; for (s = 123456 ;; *s!= \0 ;; s++) fputc(*s, stdout);... Considerando o seguinte contexto: (a) a fatia de tempo destinado a thread 1, pelo sistema operacional, se esgota enquanto ela ainda está executando seu laço de repetição; (b) a thread 2 é então executada de maneira intercalada com a thread 1; (c) isto se repete algumas vezes. Assim sendo, a saída padrão ( tela ) poderá conter algo como: ABC1D2E3F456

POSIX Threads (Pthreads) Uma padronização desenvolvida pelo comitê POSIX (Portable Operating System Interface) para tornar os programas que utilizam threads portáveis através de várias plataformas. Inclui suporte à criação e controle de threads e a alguns objetos de sincronização básicos.

Elementos Básico de threading na biblioteca Pthreads pthread_create e pthread_exit pthread_create() cria uma nova thread, que pode (ou não) começar a executar imediatamente após a chamada ter sido concluída. int pthread_create ( ); pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg pthread_exit() é chamada no contexto de uma thread criada por pthread_create() e faz com que essa thread seja finalizada. void pthread_exit( ); void *value_ptr

Elementos Básico de threading na biblioteca Pthreads join e detach Uma thread pode aguardar pela finalização de outra thread através de pthread_join(). int pthread_join( ); pthread_t thread, void **value_ptr pthread_detach() avisa à implementação subjacente que a thread especificada deve ser liberada assim que terminar. int pthread_detach ( ); pthread_t *thread

Mutexes (mutually exclusive) Um mutex permite acesso de uma thread por vez a um recuso através de uma trava mutualmente exclusiva (mutually exclusive). A função pthread_mutex_init() e a função pthread_mutex_destroy() respectivamente criam e liberam um objeto mutex. int pthread_mutex_init ( ); pthread_mutex_t *mutex, const pthread_mutexattr_t *attr int pthread_mutex_destroy ( pthread_mutex_t *mutex ); Mutexes devem ter sido inicializados antes de serem utilizados (no contexto das threads) pelas seguintes funções: int pthread_mutex_lock ( pthread_mutex_t *mutex ); int pthread_mutex_trylock ( pthread_mutex_t *mutex ); int pthread_mutex_unlock ( pthread_mutex_t *mutex );

#include <stdio.h> #include <pthread.h> pthread_mutex_t meu_mutex; struct limite int baixo; int alto; ; struct limite limite_1, limite_2; void* encontra_primos ( void *param ); int main ( ) pthread_t thd1, thd2; pthread_mutex_init( &meu_mutex, NULL ); limite_1.baixo = 0; limite_1.alto = 1000; pthread_create ( &thd1, NULL, encontra_primos, &limite_1); limite_2.baixo = 1000; limite_2.alto = 2000; pthread_create ( &thd2, NULL, encontra_primos, &limite_2); pthread_join ( thd1, NULL ); pthread_join ( thd2, NULL ); pthread_mutex_destroy ( &meu_mutex ); system ( "pause" ) ; return 0; void* encontra_primos( void *param ) struct limite *aux; aux = (struct limite *) param; int n, k; int primo; for ( n = aux->baixo; n <= aux->alto; n++ ) primo = 1; for ( k = 2; k < n; k++ ) if ( (n % k) == 0 ) primo = 0; break; if ( primo ) pthread_mutex_lock ( &meu_mutex ); printf ( " %u \n ", n ); pthread_mutex_unlock( &meu_mutex ); pthread_exit ( NULL );

pthread_create() pthread_create() Primos de 0 a 1000 Primos de 1001 a 2000 pthread_join()

Mais informações (técnicas) Para instalar em Dev C++ Ir no menu Ferramentas e depois no sub-menu Atualizações (++). No campo Select devpack server selecionar devpaks.org Community Devpacks e então clicar no botão Check for updates. Após as atualizações, selecionar item relativo a Pthreads e clicar no botão Download selected. Uma vez realizando o download ativa-se um instalador. Ao compilar um projeto com pthread, pode acontecer um erro causado pela falta dos arquivos libpthreadgc2.a e pthreadgc2.dll. O primeiro se encontra no diretório (default):...\devc++\dev-cpp\lib e o segundo pode ser encontrado no link: ftp://sourceware.org/pub/pthreads-win32/dll-latest/lib/. (último acesso em 20/05/2010). O arquivo libpthreadgc2.a deve ser adicionado ao projeto indo no menu Projeto, depois no sub-menu Opções de Projeto e clicando-se em Adicionar Biblioteca. O arquivo pthreadgc2.dll deve ser adicionado aos arquivos do Dev C++ (\DevC++\Dev- Cpp\bin) ou as pastas do sistema operacional, como C:\Windows\System32, que além de não ser recomendado, ainda pode ser mais trabalhoso, devido aos sistemas de segurança dos sistemas operacionais modernos.

Mais informações (técnicas) Para instalar Pthread em outros... Pesquisar na internet... Talvez em: http://koti.mbnet.fi/outgun/documentation/compiler_install.html#pthreads Obs. : Último acesso foi em 19/05/2008, às 21:05. Infos http://sources.redhat.com/pthreads-win32/ Obs. : Último acesso foi em 19/05/2008, às 21:05. Infos http://www.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html Todas as man pages relativas a Pthreads. Obs. : Último acesso foi em 19/05/2008, às 20:07.

Apenas Lembrando: Número primo Número primo é um número inteiro com apenas quatro divisores inteiros: 1, -1, seu oposto e ele mesmo. Por exemplo, o número 3 é um número primo pois seus dois únicos divisores inteiros são 1 e 3, -1 e -3. Se um número inteiro tem módulo maior que 1 e não é primo, diz-se que é composto. Os números 0 e 1 não são considerados primos nem compostos. O conceito de número primo é muito importante na teoria dos números. Um dos resultados da teoria dos números é o Teorema Fundamental da Aritmética, que afirma que qualquer número natural pode ser escrito de forma única (desconsiderando a ordem) como um produto de números primos (chamados fatores primos): este processo se chama decomposição em fatores primos (fatoração). Os 25 primeiros números primos positivos são: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97... Origem: Wikipédia, a enciclopédia livre.

À quem interessar possa outra versão do mesmo programa. #include <stdio.h> #include <pthread.h> pthread_mutex_t console_mutex; struct nrange unsigned low; unsigned high; range1, range2; void *find_primes(void *param); int main(int argc, char **argv) pthread_t thd1, thd2; pthread_mutex_init(&console_mutex, NULL); range1.low = 0; range1.high = 1000; pthread_create ( range2.low = 1000; range2.high = 2000; pthread_create ( pthread_join ( thd1, NULL ); pthread_join ( thd2, NULL ); &thd1, NULL, find_primes, &range1); &thd2, NULL, find_primes, &range2); pthread_mutex_destroy ( &console_mutex ); fgetc ( stdin ); return 0; void *find_primes( void *param ) struct nrange *range = (struct nrange*)param; unsigned n, k; int prime; for (n = range->low; n <= range->high; n++) prime = 1; for (k = 2; k < n; k++) if ( (n % k) == 0 ) prime = 0; break; if (prime) pthread_mutex_lock(&console_mutex); printf ( "%u\n", n ); pthread_mutex_unlock(&console_mutex); pthread_exit(null);

Atividades Exercícios Estudar Semáforos em Pthread. Pesquisar/Estudar como programar com Pthread de maneira orientada a objetos. Vide http://www.linuxselfhelp.com/howto/c++programming-howto-18.html http://threads.sourceforge.net/

Threads Windows

Threads em Windows Além de pthread, na programação (C/C++) para S.O. Windows, pode-se utilizar as seguintes alternativas: C run-time libraries (que faz parte da Microsoft Run-time Library). Win 32 API. Veja a próxima aula. Veja a bibliografia indicada em uma próxima transparência (abaixo)

C run-time libraries C run-time libraries faz parte da Microsoft Run-time Library. O Microsoft run-time library provê rotinas para programar o sistema operacional Microsoft Windows. Estas rotinas automatizam muitas tarefas comuns de programação que não são providas pelas linguagens C e C++ [Microsoft Visual C++ Help].

Win 32 API O Win32 API (também conhecido como Windows API) é um arquétipo (framework) baseado em C para a criação de aplicações Windows, e já estava disponível à partir das primeiras versões do Windows.

Bibliografias relativas a Threads. SCHILDT, H.: The Art of C++. McGraw-Hill Osborne Media. 1ª Edição (Paperback) 2004. ISBN-10: 0072255129 RICHARD, H. C.; KUO-CHUNG, T.: Modern Multithreading: Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs. Wiley-Interscience (Paperback) 2005. ISBN-10: 0471725048 HUGHES C; HUGHES T.: Object-Oriented Multithreading Using C++. Wiley; (Paperback) 1997. ISBN-10: 0471180122. HUGHES C; HUGHES T.: Professional Multicore Programming: Design and Implementation for C++ Developers. Wrox (Paperback) 2008. ISBN-10: 0470289627