2010-05-09 10 views
11

Estoy usando pthreads-win32 para permitir el enhebrado de soporte para Windows.Portabilidad de pthreads-win32 sobre varios compiladores de ventanas

Tengo un proyecto multiplataforma que usa pthreads y quiero hacer que funcione en Windows con varios compiladores y diferentes versiones del sistema operativo.

Al menos, de acuerdo con la documentación pthreads-win32 debería funcionar con MSVC e incluso compilaciones MSVC proporcionadas.

Pero no sé si la biblioteca se prueba con los últimos compiladores de MSVC como MSVC-2008 y si es compatible con ventanas de 64 bits.

De Su propia experiencia ¿Conoces algún problema con esta biblioteca?

  • ¿Tiene problemas con MSVC8, MSVC9, MSVC10?
  • ¿Tiene problemas con Windows x86_64?
  • ¿Tiene problemas con Windows Vista/Windows 7?

Notas:

  • Ni siquiera trato de recomendar el uso de Boost.Thread, no estoy interesado en Y estoy familiarizado con la biblioteca Boost.Thread
  • estoy. no está interesado en reinventar la rueda con Win32 API (que carece de RW-Locks, variables condicionales, etc.).
  • Me las arreglé para compilar un proyecto con MSVC-2008 y MinGW GCC-4.3 y luego ejecutar pruebas unitarias en él fácilmente, utilizando la DLL precompilada actual de pthreads.

Solo necesito saber las limitaciones de pthreads-win32.

+0

Por ** ** portátil que significa sólo entre las versiones de Windows? Si es así, me quedaría con la API kernel32. ¿O hay una ventaja significativa usando pthread-win32? – jweyrich

+0

@jweyrich. Quiero decir que puedo usarlo con los últimos MSVC-2008 y | Windows7 y | x86_64. Y no, usar Win32 API no es una opción (sin punteros específicos de hilo, sin RW-Locks, sin variables condicionales, etc.) – Artyom

Respuesta

8

Bueno, paxdiablo aparentemente lo ha resumido aquí. Pero a partir de mi experiencia pasada con esta biblioteca, puedo agregar un par de cosas aquí.

En primer lugar, utilicé un subconjunto de las funciones de la biblioteca con MSVC 2008 sin ningún tipo de problema.

En segundo lugar, algunos de mis colegas lo tienen funcionando en el x86_64 (con MSVC2008 y MinGW). No han enfrentado ningún problema después de muchos ciclos de pruebas beta y de QA. Aunque no lo he probado yo mismo, no puedo estar seguro de esto.

Por lo que parece, puede ser adecuado para su uso. La única advertencia aquí es que si encuentras algún problema, estarás a merced de una lista de correo no tan activa (o tal vez quieras ensuciarte las manos con el código fuente o algo así).

+0

Gracias, eso era exactamente lo que quería saber. – Artyom

2

No puedo decir con certeza y esto puede no ser lo que quieres escuchar, pero dado que el último lanzamiento es de fecha 2006, sería muy cuidadoso de usar esto en los últimos compiladores. Es puede trabajar, pero es probable que dependa de usted para ponerlo en marcha. Parece haber mucha discusión sobre cómo hacerlo funcionar en Cygwin y MinGW, pero poco valioso para MSVC, y nada Puedo encontrarlo más allá de MSVC2005.

Además, si examina los archivos de CVS, hay pocos archivos que se han actualizado en el último año (la mayoría son de hace dos o cinco años). La pareja que está fechada hace menos de un año tiene la descripción "Comentarios y cambios de estilo de código", lo que me lleva a pensar que ninguna parte del producto ha estado en desarrollo activo durante un tiempo.

Ahora tal vez estoy equivocado y esto es simplemente un producto estable increíblemente bien escrito, pero mi naturaleza interna es más probable que concluya que es uno de los millones de buenas ideas que se han quedado en el camino.

Y, echando un vistazo a las listas de correo, solo hay siete mensajes publicados en los primeros cinco meses de 2010 (el primero de los cuales no ha recibido respuesta durante cuatro meses) y solo 59 durante todo el 2009. Coloréame escéptico, pero eso no parece ser una comunidad de apoyo enormemente vibrante.

Parece que hay un parche para Windows de 64 bits (ver here en los archivos de 2010), pero, de nuevo, esto parece tener problemas que están sin respuesta desde febrero y sólo menciona el apoyo a MinGW:

... este parche (un poco difícil y necesita una limpieza final y alguna extensión del archivo make de prueba para permitir CROSS aquí) permite construir pthread para el objetivo x86_64-pc-mingw32.

Esta es no el tipo de cosa que estaría utilizando para mi software de misión crítica.

Y sé que usted indicó que no está interesado en reinventar la rueda, pero puede implementar bloqueos de múltiples lectores y variables de condición de las primitivas más básicas con bastante facilidad - incluso tuve un esquema de múltiples lectores que resolvió el problema de escribir la inanición de una manera que casi me consiguió una patente (no es que estoy de acuerdo con las patentes de software, pero mi empleador insiste en que son valiosas).

Y si la única rueda que ha tiene la mitad de sus radios que faltan y es terriblemente fuera de forma, es posible que sólo tenga que reconsiderar :-)

En cualquier caso, Vista y Server2k8 introdujeron tanto condition variables y slim reader/writer locks. Thread-local storage ha estado presente desde Win2k. Sé que eso no ayudará si todavía necesitas soportar XP, pero estaría mirando hacia el futuro.

Y como parece que ha definido la portabilidad como "solo para Windows", y todas las características que desea están disponibles en las versiones actuales, no estoy seguro de que vea la ventaja de seguir con pthreads. Si quería portabilidad para POSIX, sí, pero ese no parece ser el caso aquí.

+0

Pocos puntos: compilé mi proyecto con la versión MSVC de pthreads, realizo pruebas unitarias y funciona ...(MSVC 2008), así que supongo que está bien depurado, respaldado y existe desde hace años. (nota, no lo compilé sino que usé binarios precompilados para MSVC). Acerca de TLS: Windows TLS API incluso no le permite proporcionar un destructor para el puntero TLS ... Necesita escribir cosas bastante complicadas para que funcione. También tiene una sección crítica/variables condicionales que todavía tiene que administrar para trabajar con bloqueos recursivos/no recursivos. Con pthread es metter de simple bandera. – Artyom

+0

Nota: Necesito pthreads porque es un proyecto portátil y Windows es una de las plataformas que le gustaría apoyar. Necesito saber las limitaciones de la biblioteca pthreads para saber qué funcionaría y qué no. – Artyom

+0

Evidentemente, entendí mal su requisito de portabilidad, parecía no incluir plataformas que no fueran de Windows. Mi sugerencia es que obtengas una respuesta más específica publicando en los foros el mismo producto, ya que recibiste poca respuesta aquí durante dos días, y normalmente somos bastante locuaces y obstinados, listos para permitirte saber lo que pensamos con muy pocas indicaciones :-) Pero, dada la actividad en su junta, es posible que tenga que esperar un poco. Si lo haces funcionar, entonces estás todo el camino hasta allí. Todavía estaría preocupado por el apoyo, pero eso depende de tu situación. – paxdiablo

0

Sorprendido de que nadie haya sugerido los bloques de construcción de subprocesos de Intel. Son muy activos y admiten prácticamente todo, con la versión más reciente de hace menos de dos semanas, y las características de C++ 0x si utiliza un compilador compatible.

http://software.intel.com/en-us/intel-tbb/#sysreq

+3

¿Es de código abierto? AFAIK no. Entonces no estoy interesado. 2. ° No estoy interesado en otras bibliotecas. Prefiero comprender las limitaciones de pthreads-win32 – Artyom

Cuestiones relacionadas