elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Pequeña ayudita porfavor (threads/hilos) :) en: 9 Enero 2014, 19:15 pm
Hola, buenas a todos!

Tengo un problemilla con este programa.

Tengo que hacer que de como resultado el numero pi pero no se que hago mal que las interaciones no me funcionan correctamente (algunos numeros se repiten) y hace que el proceso falle. Esta hecho con threads. Cualquier ayuda sera bienvenida!
Código
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <string.h>
  4. # include <unistd.h>
  5. # include <pthread.h>
  6. double factores [1000];
  7. int i,N;
  8. double step,x, totalsum, pi;
  9.  
  10. void *calcularsum (void *argument){
  11. x = (i+0.5)*step;
  12. factores[i] = 4.0/(1.0+x*x);
  13. }
  14.  
  15. int main (int argc, char *argv[]) {
  16. if (argc != 2){
  17. printf("Se ha de introducir un valor. Ejemplo: ./pi 10\n");
  18. }else{
  19. N=atoi(argv[1]);
  20. step = 1.0/N;
  21. pthread_t h[N];
  22.  
  23. for (i=0; i<N; i++) {
  24. pthread_create(&h[i] , NULL , calcularsum , NULL);
  25.  
  26. }
  27. for (i=0; i<N; i++){
  28. pthread_join(h[i], NULL);
  29. totalsum = factores[i] + totalsum;
  30. printf("%f\n",totalsum);
  31. }
  32. pi = totalsum * step;
  33. printf("%.10f\n", pi);
  34. }
  35. return 0;
  36. }
  37.  
Al hacer el "printf("%f\n",totalsum); " para comprobar que numeros van haciendo los diferentes threads, me encuentro con que alguna vez (random) la hace bien, pero lo mas normal es que el primer número salga como 0.000000 y/o algunos otros se repitan.

El resultado de ejecucion seria:
./pi 10
0.000000
3.911980
7.676686
7.676686
11.003090
14.074107
16.886058
19.446058
21.768264
23.870761
2.3870760525

En cambio otra vez, es un número mas aproximado a pi:
./pi 10
3.990025
7.902005
11.666711
15.230186
18.556589
21.627606
24.439557
26.999557
29.321763
31.424260
3.1424259850
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines