Professional Documents
Culture Documents
Revisao de Programacao Concorrente
Revisao de Programacao Concorrente
https://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread.h.html
10
Criação de Threads
pthread_t threads[2];
11
Passando Parâmetros
pthread_t threads[2];
14
Exemplo de Thread (3/4)
/*verificar se ocorreu algum erro na chamada de pthread_join*/
if(rstatus != 0)
{
printf ("Erro ao aguardar finalização do thread.\n");
exit(EXIT_FAILURE);
}
return 0;
}
15
Exemplo de Thread (4/4)
void * routine(void *arg)
{
/*exibe o argumento recebido*/
printf("Argumento: %s\n", (char *)arg);
16
Compilando
• Biblioteca de pthreds é dinâmica
• Linha de comando
– gcc ... -lpthread
17
Múltiplas Threads (1/2)
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
typedef struct {
int idx, length;
}thread_arg, *ptr_thread_arg;
pthread_t threads[2];
19
20
Somando Números (1/4)
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#define NUMTHREADS 2
#define VETSIZE 5000
typedef struct {
int fromidx, length;
}thread_arg, *ptr_thread_arg;
pthread_t threads[NUMTHREADS];
thread_arg arguments[NUMTHREADS];
int nums[VETSIZE];
int sum;
23
Somando Números (4/4)
24
Alguns Conceitos
• Exclusão mútua (mutex)
– Técnica usada para evitar que dois processos ou threads tenham
acesso simultaneamente a um recurso compartilhado, denominado
seção crítica.
• Sessão crítica
– parte do programa que é executada por somente uma thread de cada
vez (em exclusão mútua)
25
Exercícios
1. Crie um programa multithread que calcule o valor da função f(x) = (sen(x))^3
+ sqrt(cos(x)), usando a série de Taylor com 20 termos. Cada Thread irá calcular
o valor de uma das duas funções.
26
Sincronização
27
Necessidade de sincronização
competitiva
28
Escalonamento
29
Problemas
30
Questões de Projeto
31
Problema Produtor-Consumidor
32
Controle do Buffer
33
Condições
34
Implementação
35
Problemas
36
Uma tentativa
37
Indeterminismo
38
Métodos de Sincronização
39
Semáforos
40
Tipos de Semáforos
41
Implementação
42
Exemplo
43
Implementação
44
Exemplo
45
Outro exemplo
46
Avaliação de Semáforos
47
Interface pthread para semáforo
• Header
– #include <semaphore.h>
• Tipo de dados
48
Interface pthread para semáforo
• Primitivas
49
Interface pthread para semáforo
• Sintaxe das primitivas
50
Resumindo...
...
#include <semaphore.h>
sem_t meusemaforo;
void main( … ) {
…
sem_init (&meusemaforo, 0 , 1);
… // Cria as threads, inicia, join, etc.
sem_destroy(&meusemaforo);
}
void funcao_thread( … ) {
...
sem_wait(&meusemaforo); // Inicio da regiao critica
// Operação crítica
sem_post(&meusemaforo); // Fim da regiao critica
...
}
51
Exercícios
Para o exercício abaixo, cronometre o tempo de operação. Use
semáforos para proteger a região crítica do programa.
52