Hola, soy nuevo en el foro, tengo un problema con los valores que regresan los threads.
El programa debe crear 5 hilos de ejcución. Cada hilo determina un número aleatorio entre 1 y 10. El hilo principal espera a que los hilos terminen, calcula la suma de los números generados aleatoriamente por cada hilo y muestra en pantalla dicha suma.
Me regresa datos que no corresponden (ejemplo):
Número aleatorio: 8
Número aleatorio: 7
Número aleatorio: 7
Número aleatorio: 7
Número aleatorio: 7
Suma de los números: 7
Aquí el código:
Código C:
Ver original#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
struct hilos_random_parms
{
int randi;
};
int aleatorios[5];
int cont = 0;
void* hilos_random(void* parameters)
{
struct hilos_random_parms* p = (struct hilos_random_parms*)parameters;
aleatorios
[cont
] = (rand() % p
->randi
) + 1; printf("Número aleatorio: %d \n", aleatorios
[cont
]); cont++;
return NULL;
}
int main()
{
pthread_t thread1_id;
pthread_t thread2_id;
pthread_t thread3_id;
pthread_t thread4_id;
pthread_t thread5_id;
struct hilos_random_parms thread1_args;
thread1_args.randi = 10;
pthread_create(&thread1_id, NULL, &hilos_random, &thread1_args);
pthread_create(&thread2_id, NULL, &hilos_random, &thread1_args);
pthread_create(&thread3_id, NULL, &hilos_random, &thread1_args);
pthread_create(&thread4_id, NULL, &hilos_random, &thread1_args);
pthread_create(&thread5_id, NULL, &hilos_random, &thread1_args);
pthread_join(thread1_id, NULL);
pthread_join(thread2_id, NULL);
pthread_join(thread3_id, NULL);
pthread_join(thread4_id, NULL);
pthread_join(thread5_id, NULL);
int total = 0;
int i;
for (i = 0; i < 5; i++)
{
total += aleatorios[i];
}
printf("Suma de los números: %d \n", total
);
return 0;
}