Cita:
Iniciado por jc_moj ¿Al usar srand antes de crear los thread no queda ya la semilla establecida y por tanto, cada thread, lo pida cuando lo pida, obtiene ya un número aleatorio adecuado?
Si, cada thread cuando lo pida ya te generara un numero random.
Excepto que como lo estas pidiendo números aletorios al mismo tiempo no es sorpresa que te regrese el mismo numero en diferentes threads.
Esto es por varias cosas:
1. srand tiene un estado interno
2. mandas a llamar srand al mismo tiempo y por lo tanto en el mismo estado interno
3. Obtienes el mismo numero aleatorio en varios threads
Este mismo ejemplo lo puedes con una simple suma.
Imagina que tienes una variable
Y que al mismo tiempo sumas en 2 threads
¿Cual crees que sea el resultado?
Bueno el resultado puede ser 1 o 2.
¿Porque pasa esto?
Por que como se ejecuta al mismo tiempo los 2 threads tienen el mismo estado (0).
Puede ser que en algunos casos, toda la suma del primer thread antes del segundo. Lo cual parecerá que funciona bien.
Ejemplo sencillo
Código C:
Ver original#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#define N 5
int count = 0;
void* work(void* parameters)
{
printf("Count: %d \n", count
); count += 1;
return NULL;
}
int main()
{
pthread_t thread[N];
int i;
for(i = 0; i < N; i++)
pthread_create(&thread[i], NULL, work, NULL);
for(i = 0; i < N; i++)
pthread_join(thread[i], NULL);
return 0;
}