Jump to content
Fórum Script Brasil
  • 0

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


Guest --Emílio --
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...