Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda:programa Que O Usuário Define O Número De Threads


Guest --Emílio --

Pergunta

Guest --Emílio --

Quero uma ajuda para ao invés do programa encontrar o maior valor entre as 500 posições com cinco threads,

o mesmo peça ao Usuário que ele informe o número de threads e os mesmos calculos sejam efetuados para

encontrar o maior valor entre as 500 posições.

/*

Este Programa cria um vetor de 500 posições, inicializando o mesmo com números aleatórios

e cria 5 threads para encontrar o maior valor - sem mutex - variavel local

*/

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

#define TAM 500

int vetor[TAM];

void inicializa_vetor();

void mostra_vetor();

void *soma_vetor(void *arg);

int main()

{

pthread_t t1, t2, t3, t4, t5;

int x, y, z, a, b, sum1, maior;

inicializa_vetor();

mostra_vetor();

x = 0;

pthread_create(&t1, NULL, soma_vetor, (void *)&x);

y = 100;

pthread_create(&t2, NULL, soma_vetor, (void *)&y);

z = 200;

pthread_create(&t3, NULL, soma_vetor, (void *)&z);

a = 300;

pthread_create(&t4, NULL, soma_vetor, (void *)&a);

b = 400;

pthread_create(&t5, NULL, soma_vetor, (void *)&b);

maior = 0;

pthread_join(t1, (void **)&sum1);//recebe de cada thread a soma individual

if (maior < sum1)

maior = sum1;

pthread_join(t2, (void **)&sum1);

if (maior < sum1)

maior = sum1;

pthread_join(t3, (void **)&sum1);

if (maior < sum1)

maior = sum1;

pthread_join(t4, (void **)&sum1);

if (maior < sum1)

maior = sum1;

pthread_join(t5, (void **)&sum1);

if (maior < sum1)

maior = sum1;

printf("\n Maior Valor = %d ", maior);

}

void * soma_vetor(void *arg)

{

int x, maior, pos = *((int*)arg);//variável maior local

printf("\n thread inicia na pos = %d \n", pos);

sleep(2);

maior = 0;

for (x=pos; x < (100+pos); x ++)

if (vetor[x] > maior)

maior = vetor[x];

printf("O maior elemento é %d\n",maior);

pthread_exit((void *)maior);

}

void mostra_vetor()

{

int z;

printf("\n v e t o r \n");

for (z=0; z < TAM; z ++){

printf("\n Posicao %d - valor %d", z, vetor[z]);

}

printf("\n\n\n");

}

void inicializa_vetor()

{

int z;

/* inicializar o gerador de números aleatórios */

srand(time(NULL));

for (z=0; z<TAM; z++)

{

/* para gerar números aleatórios de 0 a 500 */

vetor[z] = random()%10000;

}

}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...