Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/03/2015, 21:45
dmorill
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: El gran misterio de unos threads

Cita:
Iniciado por razpeitia Ver Mensaje
Hola razpeitia, muchas gracias por tu respuesta, dime si te he entendido bien, tu dices que es un problema concurrencia, pues los aleatorios darán iguales cada vez que se llame la función de crear un aleatorio. O bien te refieres a que los thread puede escribir sobre una variable sumultaneamente y pueden generar problemas (para lo cual uso el mutex).

Te pongo un ejemplo de como uso los threads para que me expliques si eses es el problema (en el siguiente es un ejemplo de como lo utilizo en el algoritmo grande, que no lo pongo porque es super grande jeje y por tanto en este ejemplo no tengo problemas pero indica la manera de cómo los usos).

Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3. #include <mutex>
  4. #include <random>
  5. #include <thread>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. mutex barrera;
  11. random_device rd;
  12. mt19937 generator(rd());
  13. uniform_real_distribution<double> distUni(0.0, 1.0);
  14.  
  15. void fun(double& suma);
  16.  
  17. int main(){
  18.     int i; double suma = 0;
  19.     vector<thread> v;
  20.     for (i = 0; i < 8; i++){
  21.         v.push_back(thread(fun, ref(suma)));
  22.     }
  23.     vector<thread>::iterator it;
  24.     for (it = v.begin(); it != v.end(); it++){
  25.         it->join();
  26.     }
  27.  
  28.     cout << "suma: " << suma << endl;
  29.  
  30.     cin.get();
  31.     return 0;
  32. }
  33.  
  34. void fun(double& suma){
  35.     double x;
  36.     x = distUni(generator);
  37.     barrera.lock();
  38.     cout << x << endl;
  39.     suma += x;
  40.     barrera.unlock();
  41. }

Agradezco mucho tu ayuda :D. saludos