Inicio > C/C++, Programación > Números aleatorios en C/C++ con Threads

Números aleatorios en C/C++ con Threads


 Con los nuevos multicore, los programadores debemos aprender a programar para estos sistemas, y uno de las formas más eficientes es mediante el uso de hebras (threads).

El problema está cuando te encuentras con instrucciones que no están preparadas para esto (no thread-safe), y uno de ellas, es la función rand() de C/C++.

Este fue mi problema cuando estaba programando el cálculo de Pi mediante el sistema de Montecarlo, que provocaba que tardase hasta 5 veces más mediante hebras que mediante paso de mensajes.

Afortunadamente, tenemos la familia de instrucciones reentrantes (reentrant), como son sdran48_r(), rand_r()…

Así que calcular números aleatorios sin problemas entre hilos es tan fácil como esto:

#include <iostream></span></p>
#include <stdio.h></span></p>
#include <stdlib.h>
#include <time.h>
int main() {
drand48_data data;
double resultado;
srand48_r(time(NULL), &data);
rand48_r(&data, &resultado);
    cout << "El número aleatorio es " << resultado << endl;
   return 0;
}

Y con eso lo tendréis solucionado.

Por último, recordaros que hay muchas otras librerías en C/C++ que usan variables globales, como el strtok, así que si tenéis problemas al usar threads, echad un ojo a las librerías que estáis usando y comprobad si tenéis alternativa reentrante.

Anuncios
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: