Cuando el Comité de Estándares de C++ estaba creando el estándar inicial de C++, el mecanismo de concurrencia fue excluído de forma explícita porque C no tenía uno y también porque había varíos enfoques rivales acerca de su implementación. Parecía demasiado restrictivo forzar a los programadores a usar una sola alternativa.
Sin embargo, la alternativa resultó ser peor. Para usar concurriencia, tenías que encontrar y aprender una librería y ocuparte de su indiosincrasia y las incertidumbres de trabajar con un vendedor particular. Además, no había garantía de que una librería funcionaría en diferentes compiladores o en distintas plataformas. También, desde que la concurrencia no formaba parte del estándar del lenguaje, fue más difícil encontrar programadores C++ que también entendieran la programación concurrente.
Otra influencia pudo ser el lenguaje Java, que incluyó concurrencia en el núcleo del lenguaje. Aunque el multihilado is aún complicado, los programadores de Java tienden a empezar a aprenderlo y usarlo desde el principio.
El Comité de Estándares de C++ está considerando incluir el soporte a la concurrencia en la siguiente iteración de C++, pero en el momento de este escrito no estaba claro qué aspecto tendrá la librería. Decidimos usar la librería ZThread como base para este capítulo. La escogimos por su diseño, y es open-source y gratuitamente descargable desde http://zthread.sourceforge.net. Eric Crahen de IBM, el autor de la librería ZThread, fue decisivo para crear este capítulo.[150]
Este capítulo utiliza sólo un subgrupo de la librería ZThread, de acuerdo con el convenio de ideas fundamentales sobre los hilos. La librería ZThread contiene un soporte a los hilos significativamente más sofisticado que el que se muestra aquí, y deberías estudiar esa librería más profundamente para comprender completamente sus posibilidades.
Por favor, note que la librería ZThread es un proyecto independiente y no está soportada por el autor de este libro; simplemente estamos usando la librería en este capítulo y no podemos dar soporte técnico a las características de la instalación. Mira el sitio web de ZThread para obtener soporte en la instalación y reporte de errores.
La librería ZThread se distribuye como código fuente. Después de descargarla (versión 2.3 o superior) desde la web de ZThread, debes compilar la librería primero, y después configurar tu proyecto para que use la librería. -->
El método habitual para compilar la librería ZThreads para los distintos sabores de UNIX (Linux, SunOS, Cygwin, etc) es usar un script de configuración. Después de desempaquetar los archivos (usando tar), simplemente ejecuta: ./configure && make install
en el directorio principal de ZThreads para compilar e instalar una copia de la librería en directorio /usr/local. Puedes personalizar algunas opciones cuando uses el script, incluída la localización de los ficheros. Para más detalles, utiliza este comando: ./configure ?help
El código de ZThreads está estructurado para simplificar la compilación para otras plataformas (como Borland, Microsoft y Metrowerks). Para hacer esto, crea un nuevo proyecto y añade todos los archivos .cxx en el directorio src de ZThreads a la lista de archivos a compilar. Además, asegúrate de incluir el directorio incluído del archivo en la ruta de búsqueda de la cabecera para tu proyecto???. Los detalles exactos variarán de compilador en compilador, por lo que necesitarás estar algo familiarizado con tu conjunto de herramientas para ser capaz de utilizar esta opción.
Una vez la compilación ha finalizado con éxito, el siguiente paso es crear un proyecto que use la nueva librería compilada. Primero, permite al compilador saber donde están localizadas las cabeceras, por lo que tu instrucción #include funcionará correctamente. Habitualmente, necesitarás en tu proyecto una opción como se muestra:
-I/path/to/installation/include
Si utilizaste el script de configuración, la ruta de instalación será el prefijo de la que definiste (por defecto, /usr/local). Si utilizaste uno de los archivos de proyecto en la creación del directorio, la ruta instalación debería ser simplemente la ruta al directorio principal del archivo ZThreads.
Después, necesitarás añadir una opción a tu proyecto que permitirá al enlazador saber donde está la librería. Si usaste el script de configuración, se parecerá a lo siguiente:
-L/path/to/installation/lib ?lZThread
Si usaste uno de los archivos del proyecto proporcionados, será similar a:
-L/path/to/installation/Debug ZThread.lib
De nuevo, si usaste el script de configuración, la ruta de instalación s será el prefijo de la que definistes. Si su utilizaste un archivo del proyecto, la ruta será la misma que la del directorio principal de ZThreads.
Nota que si estás utilizando Linux, o Cygwin (www.cygwin.com) bajo Windows, no deberías necesitar modificar la ruta de include o de la librería; el proceso por defecto de instalación tendrá cuidado para hacerlo por ti, normalmente.
En GNU/Linux, es posible que necesites añadir lo siguiente a tu .bashrc para que el sistema pueda encontrar la el archivo de la librería compartida LibZThread-x.x.so.0 cuando ejecute programas de este capítulo.
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
(Asumiendo que utilizas el proceso de instalación por defecto y la librería compartida acaba en /user/local/lib/; en otro caso, cambia la ruta por tu localización.