TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

A Programação Concorrente

Por:   •  8/6/2015  •  Trabalho acadêmico  •  587 Palavras (3 Páginas)  •  158 Visualizações

Página 1 de 3

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;

...

Baixar como (para membros premium)  txt (3.7 Kb)   pdf (41.5 Kb)   docx (12 Kb)  
Continuar por mais 2 páginas »
Disponível apenas no TrabalhosGratuitos.com