Pthreads – POSIX Threads

Slides:



Advertisements
Apresentações semelhantes
Centro Integrado de Tecnologia da Informação
Advertisements

Sincronização com Posix Threads
PThreads MO801/MC972.
SSC SISTEMAS OPERACIONAIS I
SSC SISTEMAS OPERACIONAIS I
Threads.
SVCs para Controle de Processos no Unix
Linguagem de Programação IV
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.
Variáveis condicionais e Semáforos Aula de Concorrência.
Introdução de um programa no sistema, mostrando a interação com o sistema (programa 1.1). Utilização do compilador/ligador (cc – gcc). /* * Mostra Hello.
Threads Bauke A. Dijkstra Lucas Alves Allan F. Furukita.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguaguem de Programação II
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Respostas dos Exercícios. Lista 1 1.a) Escreva uma função que receba como parâmetro uma temperatura dada em graus Fahrenheit e retorna a temperatura.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Estruturas de Dados Aula 2: Estruturas Estáticas
Construção de Algoritmos AULA 05
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Polimorfismo e suas aplicações em C++.
PCI- Funções e Procedimentos
Fundamentos de Programação 1
INF1007: Programação 2 2 – Alocação Dinâmica
OO – Engenharia Eletrônica
INE5408 Estruturas de Dados
Aula02 – Técnicas de Programação II
OO – Engenharia Eletrônica
Fundamentos de Programação 1
Estrutura de Dados Revisão
PCI- Funções e Procedimentos
Aluno- monitor: Vagner Vengue
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
INF1007: Programação 2 9 – Tipos Abstratos de Dados
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
INF1007: Programação Funções Recursivas
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Algoritmos e Estruturas de Dados I
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Criação e manipulação de objetos
Programação de Computadores I – Arquivos
Pthreads – parte II Guilherme Galante.
Subalgoritmo É um trecho de algoritmo construído para resolver parte de um problema maior. Também chamado de módulo. A técnica que consiste dividir o.
PROGRAMAÇÃO I UNIDADE 3.
Técnicas de Programação
Listas Encadeadas.
Aula 22 Modularização 22/10/08.
Fundamentos de Programação 1
Sistemas Operacionais Aula 3
OO – Engenharia Eletrônica
DHD – Desenvolvimento em Hardware
Rosemary Silveira Filgueiras Melo
Estruturas de Dados em C
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
Linguagem C Linguagem Imperativa
DHD – Desenvolvimento em Hardware
Fundamentos de Programação 1
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2019
Transcrição da apresentação:

Pthreads – POSIX Threads Aula Prática 2 Pthreads – POSIX Threads

Threads no Linux Padrão Posix EEE POSIX 1003.1c standard (1995) Distribuída junto ao sistema Operacional Linux Pthreads é definido como um conjunto de procedimentos e tipos em C (pthread.h) Contém mais de 60 funções

gcc –o <nome_exec> <nome_fonte> -lpthread Compilando Incluir no cabeçalho: #include <pthread.h> Para compilar o código-fonte: gcc –o <nome_exec> <nome_fonte> -lpthread

Criação e Destruição de Threads Um thread é definido por uma função Descreve o corpo de execução de um thread Função pode receber parâmetros (void *) Ao final de sua execução, retorna um valor (void *) void *: flexibilidade Protótipo void <nome_func> (void *args)

Criação de Threads Criação de threads: pthread_create int pthread_create(pthread_t *tid, const pthread_arrt_t atrib, void * funcao(void *), void *args) funcao: nome da função a ser executada atrib: atributos para a execução (NULL para default) args: parâmetros de entrada para a thread tid:identificador da thread

Destruição de Threads Término de thread: return ou pthread_exit; Ciclo de vida de um thread refere-se ao tempo necessário à execução da função Ao executar sua última instrução, o thread é destruído pthread_exit(void *); Termina a thread, retornando um dado

Destruição de Threads Cancelando um thread: A thread é cancelada por outra thread através da função pthread_cancel

#include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { printf("\n%d: Hello World!\n", threadid); pthread_exit(NULL); } int main (int argc, char *argv[]) pthread_t threads[NUM_THREADS]; int rc, t; for(t=0; t<NUM_THREADS; t++){ printf("Creating thread %d\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; return code - pthread_create() is %d\n", rc); exit(-1);

Sincronização entre threads pthread_join Sincronização explícita

Sincronização entre threads pthread_join(pthread_t tid, void **ret) tid: identificação da thread a ser sincronizada ret: endereço de memória do dado retornado Invocação à pthread_join bloqueia thread invocante, enquanto sincronização não tenha terminado for(t=0; t<NUM_THREADS; t++) { rc = pthread_join(thread[t], (void **)&ret); }

Atributos de Criação Atributos: pthread_attr_t Inicialização (valores default): pthread_attr_init(pthread_attr_t *atrib) Informar se thread sofrerá sincronização (join) pthread_attr_setdetachstate (attr,detachstate) PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_DETACHED PS: Usar na criação da thread

Escalonamento pthread_attr_setschedpolicy(atrib, policy) SCHED_RR SCHED_FIFO pthread_yield() Desaloca thread da CPU

Passando parâmetros Através de memória compartilhada (variáveis globais) Alteração visível para todas as threads Através de parâmetros da função específica da thread Tipo void* Para a passagem de mais parâmetros, criar uma struct e fazer o cast (void *)

Retornando dados de uma thread void * thread_function( void *) { int code = DEFAULT VALUE; code=1000; return ( void *) code ; //cast } Para receber o valor de retorno, deve haver a chamada pthread_join

Identificação de Threads Para saber o thread ID da thread corrente: pthread_t pthread_self (void); Para comparar dois thread IDs: int pthread_equal (pthread_t t1, pthread_t t2); Retorna 0 se forem diferentes, ou diferente de 0 caso contrário

Exercício Criar 4 threads que multipliquem todos os elementos de um vetor (1000 posições) por um escalar. Criar 4 threads que achem o maior elemento de um vetor (1000 posições). Usar modelo mestre-escravo. Mestre Escravo Escravo Escravo Escravo

Bibliografia Básica http://www.llnl.gov/computing/tutorials/pthreads/ http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf