PThreads MO801/MC972.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

Sistemas Distribuídos
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Sistemas Operacionais
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
Introdução à Threads para Windows na linguagem C
Sistemas Operacionais
Funções em C.
Threads (Linha de execução )
Programação Concorrente
Alocação Dinâmida de Memória
Programando com Threads em C
Sincronização com Posix Threads
Threads no Multiplus/Mulplix Adriano Cruz ©2003 NCE e IM/UFRJ
Conceitos de Programação Paralela - 2
OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige.
Problemas com Threads MO801/MC972. Muitas threads Se algumas threads ajudam o programa, muitas threads devem ajudar mais –Certo? O overhead de escalonamento.
Chapter 4: Threads.
Threads Estagiário: Bruno Guazzelli Batista Slides de autoria do Prof Drº Marcos José Santana baseados no livro Sistemas Operacionais Modernos de A. Tanenbaum.
SSC SISTEMAS OPERACIONAIS I
SSC SISTEMAS OPERACIONAIS I
Walfredo Cirne Threads Walfredo Cirne
Programação Concorrente
Threads.
Capitulo 6 Threads Processos versus Threads Utilidade de Threads
SVCs para Controle de Processos no Unix
SVCs para Controle de Processos no Unix
Sincronização de Processos (3)
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Threads.
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Concorrência em Java Threads em Java.
Threads: Introdução e Implementação
Locks.
Concorrência em Java Threads em Java.
Unidade 1-1 Processos e Threads
Concorrência em Java Threads em Java.
PROGRAMAÇÃO ESTRUTURADA II
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 27 (1) Programação com MPI Tópicos: Modelo de Programação Funções de Ambiente Funções Básicas.
SISTEMAS OPERACIONAIS
Linguagem de Programação IV
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem C : Ponteiros
IC - UFF Sistemas Operacionais 4. Threads Texto base: capítulo 4 Operating Systems: Internals and Design Principles W. Stallings.
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.
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Programação de Sistemas Distribuídos e Concorrentes
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Transações Concorrentes
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
S ISTEMAS OPERACIONAIS PROCESSOS Horácio Ribeiro.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo I Comandos Simples e Repetições.
Programação de Computadores I – Arquivos
Variáveis condicionais e Semáforos Aula de Concorrência.
Video Capítulo 7: Sincronização de Processos. Silberschatz, Galvin and Gagne  Video Operating System Concepts Assuntos n Cenário n O problema.
Engenharia de Sistemas Embarcados Aula 9: Salvo RTOS.
Threads Bauke A. Dijkstra Lucas Alves Allan F. Furukita.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Sistemas Operacionais
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Capítulo 2 Processos e Threads 2.1 Processos 2.2 Threads
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Alessandro D. R. Fazenda
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
ProgramaçãoConcorrente Glêdson Elias
Pthreads – POSIX Threads
Transcrição da apresentação:

PThreads MO801/MC972

Idéia básica API para gerenciamento de threads Vários tutoriais disponíveis na internet Google: pthread Cobrirei apenas os tópicos mais básicos

Visão geral Sem Threads Com Threads

Características Threads co-existem num mesmo processo, compartilhando vários recursos, mas são escalonadas separadamente pelo sistema operacional Somente o mínimo necessário de recursos é replicado entre duas threads

Requisitos para execução independente Pilha Registradores Propriedades de escalonamento Sinais pendentes e bloqueados Dados específicos da thread

Uma thread… Faz parte de um processo e usa seus recursos Possui um fluxo de controle independente enquanto o processo a mantiver viva Morre se o processo pai morrer Duplica somente os recursos essenciais Pode compartilhar recursos com outras threads É barata, pois todos os recursos necessários são reservados na criação do processo pai

Como threads compartilham recursos… Alterações feitas por uma thread afetam as outras Ex.: Fechar um arquivo Dois ponteiros com o mesmo valor acessam o mesmo dado Leituras e escritas do mesmo endereço é possível É recomendado que se utilize algum mecanismo de sincronização

Como projetar programas com threads

PThread API Prefix Funcionality pthread_ Threads themselves and miscellaneous subroutines pthread_attr_ Thread attributes objects pthread_mutex_ Mutexes pthread_mutexattr_ Mutex attributes objects pthread_cond_ Condition variables pthread_cond_attr Condition attributes objects pthread_key_ Thread-specific data keys

Como programar Usar Compilar com a opção –lpthread #include “pthread.h” Compilar com a opção –lpthread gcc –lpthread pthread.c

Criando uma thread int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg);

pthread_create #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *print_message_function( void *ptr ); main() { pthread_t thread1, thread2; char *message1 = "Thread 1“, *message2 = "Thread 2"; int iret1, iret2; iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); pthread_join( thread1, NULL); pthread_join( thread2, NULL); printf("Thread 1 returns: %d\n",iret1); printf("Thread 2 returns: %d\n",iret2); exit(0); } void *print_message_function( void *ptr ) char *message; message = (char *) ptr; printf("%s \n", message);

Encerrando uma thread Além da alternativa de simplesmente encerrar a função, é possível também void pthread_exit(void *retval);

Mutex /* Note scope of variable and mutex are the same */ pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter=0; /* Function C */ void functionC() { pthread_mutex_lock( &mutex1 ); counter++ pthread_mutex_unlock( &mutex1 ); }

Fontes de problemas Condição de corrida Thread safe code Deadlock Não assuma uma ordem específica para a execução das threads Um código pode funcionar muito bem em determinados momentos e gerar sérios problemas em outros Thread safe code Use bibliotecas que possuam chamadas “thread safe” Várias chamadas à mesma função devem ser permitidas Deadlock