Guest --Emílio -- Postado Setembro 22, 2007 Denunciar Share Postado Setembro 22, 2007 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 paraencontrar 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 500int 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; }} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Setembro 22, 2007 Denunciar Share Postado Setembro 22, 2007 Acho que você postou na sala errada, não? Aqui é a sala de .NET e como não tem o cabeçalho stdfx no seu código, creio que você não esteja usando Managed C++.Se for o caso, eu movo seu tópico para C++.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
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.