pthread_join pthread ejecutar compilar compilador c windows multithreading pthreads

ejecutar - pthread c



¿Puedo obtener pthread.h de Unix para compilar en Windows? (5)

Como se mencionó en @Ninefingers, los pthreads son solo para Unix. Sólo posix, de verdad.

Dicho esto, Microsoft tiene una biblioteca que duplica pthreads:

Servicios de Microsoft Windows para UNIX Versión 3.5

Descarga de la biblioteca

Si intento compilar un programa con

#include <pthread.h>

en ella, me sale el error:

pthread.h: No such file or directory

¿Es posible compilar esto en un entorno Windows?

Estoy usando Vista con la última MinGW.

No quiero usar los Servicios de Microsoft Windows para UNIX Versión 3.5, ya que tendré que mover esto a un entorno Unix.


Hay, como recuerdo, dos distribuciones de la cadena de herramientas GNU para Windows: Mingw y Cygwin.

Espero que Cygwin funcione: se ha hecho un gran esfuerzo para hacer que ese sea un entorno posix "estándar".

La cadena de herramientas mingw usa msvcrt.dll para su tiempo de ejecución y, por lo tanto, probablemente expondrá la api "thread" de _beginthread : _beginthread que se define en <process.h>


Simplemente recoja el paquete TDM-GCC 64x. (Consta de las versiones de 32 y 64 bits de la cadena de herramientas de MinGW y se encuentra dentro de un instalador limpio). Más importante aún, contiene algo llamado biblioteca " winpthread ".

Comprende las bibliotecas estáticas libwinpthread.a , libwinpthread.a , libwinpthread.dll.a para 32 bits y 64 bits y los .dlls libwinpthread-1.dll y libwinpthread_64-1.dll 01-06-2016).

Tendrá que enlazar con la biblioteca libwinpthread.a durante la compilación. Aparte de eso, su código puede ser el mismo que para el código Pthread nativo en Linux. Hasta ahora lo he utilizado con éxito para compilar algunos programas Pthread básicos en Windows de 64 bits.

Alternativamente, puede usar la siguiente biblioteca que envuelve la API de subprocesos de Windows en la API de pthreads-win32 : pthreads-win32 .

Las dos anteriores parecen ser las formas más conocidas para esto.

Espero que esto ayude.


pthread.h es un encabezado para la API de Unix / Linux (POSIX) para subprocesos. Una capa POSIX como Cygwin probablemente compile una aplicación con #include <pthreads.h> .

La API de subprocesos de Windows nativa se expone a través de #include <windows.h> y funciona de forma ligeramente diferente a los subprocesos de Linux.

Aún así, hay una biblioteca de "pegamento" de reemplazo mantenida en http://sourceware.org/pthreads-win32/ ; tenga en cuenta que tiene algunas pequeñas incompatibilidades con MinGW / VS (por ejemplo, consulte here ).


pthread.h no está en Windows. Pero Windows tiene una amplia funcionalidad de subprocesos, comenzando con CreateThread .

Mi consejo es que no te sorprendas mirando WinAPI a través de la lente de la API de otro sistema. Estos sistemas son diferentes . Es como insistir en montar la bicicleta Win32 con su cómodo asiento de bicicleta Linux. Bueno, es posible que el asiento no encaje bien y en algunos casos simplemente se caiga.

Los subprocesos funcionan prácticamente igual en diferentes sistemas, tienes ThreadPools y mutexes . Habiendo trabajado tanto con pthreads como con Windows, puedo decir que los hilos de Windows ofrecen un poco más de funcionalidad que pthread .

Aprender otra API es bastante fácil, solo piense en términos de conceptos (exclusión mutua, etc.), luego busque cómo crear uno de esos en MSDN.