Category Archives: Programación

Jugando con threads en C++11

Una buena noticia de C++11 es que se incorporó la biblioteca pthreads al nuevo estándar. Esto quiere decir que ya no es necesario implementar un encapsulamiento propio como hacíamos algunos años atrás. Este artículo (breve) ilustra el uso de la nueva clase threads y permite jugar un poco con el comportamiento del multitasking para comprender algunas particularidades que debemos tener en cuenta a la hora de crear aplicaciones concurrentes.

Si te interesa este artículo te recomiendo leer también esta nota sobre problemas con float en Golang. Cuyos conceptos también aplican a C++.

El siguiente programa crea dos hilos de ejecución, los objetos t1 y t2 del tipo std::thread, y pasa un puntero a función con argumentos utilizando la función std::bind. Cada llamada a función se ejecutará en un hilo de ejecución separado. Aunque la función es la misma, cada llamada recibe uno de los dos vectores even y odd. Dentro de f() hay un std::mutex declado static, por lo que todas las llamadas a f() comparten el mismo objeto m y esto permite sincronizar la escritura a salida estándar a través de las distintas llamadas. Luego de crear los objetos, la función main() espera la finalización de cada hilo llamando al método join(). El constructor de la clase std::thread lanza el hilo sin necesidad de más interacción desde la función que lo crea.  Finalmente la función f() itera el vector e imprime un elemento por línea, a salida estándar.

Continue reading Jugando con threads en C++11

Puntero automático con contador de referencias

C++ es un lenguaje que no tiene manejo automático de memoria incorporado en su versión más pura. Es decir, en los compiladores o IDEs más populares entre quienes se dedican a este lenguaje. Existen algunas implementaciones de garbage collectors para C++ y las versiones más nuevas del estándar incluyen una implementación de puntero automático en la biblioteca de plantillas STL. Pero consideraría correcta la afirmación general de que el manejo de memoria en el lenguaje es manual.

La semana pasada estaba pensando en un ejercicio muy simple que requiriese conocimiento de varios aspectos del lenguaje en una cantidad de líneas reducida. Y se me ocurrió que programar un puntero automático podría cumplir con la premisa. Este es el resultado.

Continue reading Puntero automático con contador de referencias

Encontrar las direcciones MAC en una red

Cuando una red ethernet es suficientemente grande como para que el administrador no pueda tener a la mano todas las bocas de conexión, la simplicidad de conexión de esta topología se puede convertir en un problema. Descubrir los dispositivos que se encuentran conectados en un momento determinado, puede resultar complejo. Y es algo que debí solucionar más de una vez. Pero en la última ocasión se me presentó el requerimiento adicional de automatizar el control. Así que tras buscar infructuosamente una solución adecuada terminé programando una pequeña herramienta que obtiene las direcciones MAC de todos los dispositivos conectados en la red (siempre y cuando implementen el protocolo IP). Y compara el resultado con un listado de direcciones autorizadas, indicando aquellas encontradas en la red pero no listadas.

Continue reading Encontrar las direcciones MAC en una red

Ley de gravitación universal II

Segunda versión de esta simulación de la ley de gravitación universal. Implementada en 3D con la biblioteca Three.js, para Javascript. Con fines didácticos se posicionó una partícula con masa mucho mayor al resto y se fijó en el escenario para que cumpla el rol de sol. Está disponible el código fuente con licencia GPL.
Continue reading Ley de gravitación universal II