Vamos a empezar al revés:
¿Cómo es posible implementar enhebrado en una biblioteca?
No es, al menos no en (puro) C++. Esto requiere idioma soporte (el compilador es solo una implementación).
Por el momento se utilizan 2 cosas:
- código ensamblador para algunas partes (como en la biblioteca
pthread
)
- instrucciones específicas del compilador para otros (depende del compilador y plataforma)
Ambos son frágiles y requieren una enorme cantidad de trabajo para la portabilidad. Básicamente significa porciones de #ifdef
en el código para probar el compilador y la arquitectura de destino, probar el soporte de algunas directivas, etc. ...
Es por eso que se consideró necesario agregar soporte de subprocesamiento en C++ 0x .
¿Cómo hago multihilo?
Incluso antes de elegir una biblioteca, debe elegir un método. Hay 2 maneras de aplicaciones multiproceso de programación (y se pueden combinar):
- Comunicar al compartir: esto significa que utilizan mutex, operaciones atómicas, etc ... se puede utilizar
pthread
en plataformas Linux, pero recomendaría Boost.Thread
(entre otros) por su portabilidad.
- Compartir comunicando: más reciente, y adaptado a cálculos distribuidos, esto proviene de los lenguajes funcionales. Esto significa pasar mensajes de un hilo a otro y no compartir ningún recurso. Puede usar FastFlow o Intel Thread Building Blocks aka
TBB
.
Puede concebible combinar los dos, pero sería mejor no. Personalmente, encontré la descripción de FastFlow totalmente asombrosa: fomenta la programación sin bloqueos. Además, la principal ventaja del segundo método es que está mejor adaptado a la programación de múltiples procesos y escalas a entornos distribuidos.
Para empezar, recomendaría centrarse en cualquiera de los dos y crear algunas aplicaciones con él. Cuando te sientas cómodo, puedes probar el otro, pero prepárate para comenzar de nuevo, son diferentes.
Como medida de precaución, tendrá que pensar mucho más sobre la seguridad de las cadenas de caracteres en C++. No se puede simplemente rociar las palabras clave de sincronización para los métodos de clase para que sean seguras. Por lo general, utilizará herramientas como mutex u otras formas de secciones críticas, operaciones atómicas, etc. Sin embargo, podrá escribir código multihilo muy eficiente si lo hace bien. Incluso puede escribir sus propios asignadores de memoria con grupos de memoria por subproceso, pero es mucho más bajo y mucho más difícil de escribir para la corrección que Java. – stinky472
(+1) @ stinky472: Es exactamente por eso que quiero aprender multihilo en C++ y en Java. Siento que Java generalmente es bueno para intros de alto nivel para muchos temas, pero simplemente apegarse a Java puede hacer que el programador sea un poco demasiado y no exponerlos a algunos conceptos muy importantes. Por lo tanto, mientras estoy aprendiendo multihilo en Java, estoy buscando aprenderlo simultáneamente en C++ para asegurarme de que estoy aprendiendo todo lo que debería ser. – Cam