2010-08-04 16 views
6

Me gustaría aprender a construir una aplicación multihilo, pero ni siquiera sé por dónde empezar.Basic multi-threading en C/C++ - sugerencias, consejos, tutoriales, alguna dirección?

¿Cómo implementa la mayoría de las personas el multihilo? ¿Usan la biblioteca de impulso? ¿Hay alguna otra forma de hacerlo? (utilizando C/C++ estándar)

Entiendo el concepto, pero no tengo ni idea de por dónde empezar a aprender realmente cómo hacerlo. ¿Alguien puede recomendar algo?

http://msdn.microsoft.com/en-us/library/7t9ha0zh%28v=VS.80%29.aspx < --- ¿Son estas C++ estándar, o alguna implementación solo de Microsoft?

¿Tengo la certeza de que las bibliotecas de subprocesamiento múltiple están contenidas en la API de Windows? Encontré un ejemplo en MSDN ( http://msdn.microsoft.com/en-us/library/esszf9hw%28v=VS.80%29.aspx) y las funciones que usa (ReleaseMutex, etc.) parecen estar en windows.h. ¿Es esto lo que la mayoría de la gente está usando cuando hacen la programación de Windows?

+0

no hay hilos C/C++ estándar. impulsar hilos es la mejor opción siguiente http://stackoverflow.com/questions/415994/boost-thread-tutorials. C++ 0x tiene subprocesos si quiere ir por esa ruta. – Anycorn

+0

Estaba leyendo un poco el otro día, y parece que Managed C++ de Microsoft ha hecho algunas desviaciones graves del estándar de C++ que podrían engañarlo. Tenga cuidado de que la documentación de MSDN no esté hablando de C++ administrado y no de C++ estandarizado. –

+0

No dudes en echar un vistazo a mi proyecto Tetris que usa el subprocesamiento múltiple en exceso (principalmente por el bien de la autoeducación): http://code.google.com/p/tetris-challenge/. – StackedCrooked

Respuesta

3

La biblioteca de Boost es una forma multiplataforma de utilizar subprocesos.

La mayoría de las personas usa winapi o pthreads. pthreads se usó originalmente en sistemas POSIX, pero hay un puerto para mingw que también permite su uso en Windows.

Recomendaría usar boost si necesita absolutamente una solución multiplataforma, o si ya tiene vinculadas bibliotecas de impulso. Si está desarrollando para Windows o POSIX, use winapi o pthreads correspondientemente.

+0

Solo uso boost - Boost.Thread y Boost.Bind son mis dos amigos favoritos esta semana. –

+0

He usado [winpthreads] (http://sourceware.org/pthreads-win32/) con MSVC también. – sje397

2

Si está buscando un aumento de rendimiento simple en su aplicación a través de multi-threading OpenMP es una biblioteca simple que le permitirá escalar a su programa en varios núcleos, requiriendo solo #pragma colocación en su código para paralelizar bloques de código o bucles, con opciones adicionales para un rendimiento específico débil.

Esto no permite fácilmente el paralelismo grueso como una GUI/procesamiento/división de IO en la aplicación, pero permite incrementos de rendimiento de multi-threading fácilmente visibles en máquinas multi-core en un gran número de crujidos.