A Programação Concorrente
Por: luizgui32 • 8/6/2015 • Trabalho acadêmico • 587 Palavras (3 Páginas) • 183 Visualizações
Relatório da etapa 1
Passo 4:
A importância de threads em processos na busca por maior poder de computação (processamento), onde vários processadores trabalham simultaneamente na resolução de um problema especifico da surgiu a importância de threads na programação concorrente.
Ex: problema produto/consumidor
Quando uma thread tem um valor para ser comunicado para as demais threads, passando o esse valor para variáveis globais.
Exemplo código produtor/consumidor:
#include
#include
#include
#include
#define N_ITENS 10
int buffer[N_ITENS];
int inicio = 0, final = 0, cont = 0;
void* produtor(void *v) {
int i;
for (i = 0; i < N_ITENS; i++) {
while (cont == N_ITENS) ;
printf("Produtor, item = %d.\n", i);
final = (final + 1);
buffer[final] = i;
cont++;
sleep(rand() % 3); /* Permite que a outra thread execute */
}
return NULL;
}
void* consumidor(void *v) {
int i, aux;
for (i = 0; i < N_ITENS; i++) {
while (cont == 0) ;
inicio = (inicio + 1);
aux = buffer[inicio]; /* Item é consumido */
printf("Consumidor, item = %d.\n", aux);
if (aux < i)
printf("Erro: item foi consumido antes de ser produzido.\n");
else if (aux > i)
printf("Erro: item foi produzido antes de a posicao estar livre.\n");
cont--;
sleep(rand() % 3); /* Permite que a outra thread execute */
}
return NULL;
}
int main() {
int i;
pthread_t thr_produtor, thr_consumidor;
/* Limpa o buffer */
for (i = 0; i < N_ITENS; i++)
buffer[i] = 0;
pthread_create(&thr_produtor, NULL, produtor, NULL);
pthread_create(&thr_consumidor, NULL, consumidor, NULL);
pthread_join(thr_produtor, NULL);
pthread_join(thr_consumidor, NULL);
getchar();
return 0;
}
Relatório da etapa 2
Passo 4:
Situação do deadlock podem ser tradas ou não em um sistema, cabe aos desenvolvedores avaliar o custo/benefício que essas implementações podem trazer, pois as estratégias usadas para detectar e tratar as situações de deadlock geram sobrecarga.
Existem Três estratégias para tratamento de deadlocks:
- Ignorar a situação;
-Detectar o deadlock e recuperar o sistema;
-Evitar o deadlock;
Segue a baixo o código da aplicação bancária de controle de saldo bancário:
#include
#include
#include
#include
#define NTHREADS 2
float saldoA = 500, saldoB = 900;
void *function (void *threadid) {
int tid = *(int*) threadid;
if (pthread_detach(pthread_self())) { printf("--ERRO: pthread_detach()\n"); };
printf("Thread : %d esta executando...\n", (int) tid);
float x = saldoA;
...