A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Pthreads – POSIX Threads

Apresentações semelhantes


Apresentação em tema: "Pthreads – POSIX Threads"— Transcrição da apresentação:

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

2 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

3 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

4 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)

5 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

6 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

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

8 #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);

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

10 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); }

11 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

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

13 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 *)

14 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

15 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

16 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

17 Bibliografia Básica http://www.llnl.gov/computing/tutorials/pthreads/


Carregar ppt "Pthreads – POSIX Threads"

Apresentações semelhantes


Anúncios Google