2010-01-31 22 views
21

Al no tener experiencia con el enhebrado en el pasado, ¿qué técnica de enhebrado en C++ será la más fácil para un principiante? boost :: thread o pthreads?PThread vs boost :: thread?

+0

Todavía no he utilizado, pero miré la documentación de ambos. Boost es más compatible, pero pthread es mucho más fácil de usar. –

+0

Útil: http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/overview/networking/bsd_sockets.html –

Respuesta

33

Ir por impulso :: hilo. Es closely related para el trabajo en la próxima C++ standard threads, y la interfaz es bastante fácil de usar e idiomática para C++ (RAII en lugar de la administración manual de recursos).

9

boost :: thread es una abstracción muy agradable y portátil. Ciertamente lo usaría, pero también aprendería la API nativa de thread, como pthreads, para que sepas cómo funciona el threading en tu plataforma.

2

Yo diría que tienen la misma dificultad. La única gran diferencia que veo es que las PThreads son bastante compatibles (si le interesan los puertos cruzados). Otra es que ha habido bastantes buenos libros sobre PThreads, aunque casi todos los conceptos se trasladarán a boost :: thread, y muchas otras bibliotecas de threading.

+1

pthreads solo están disponibles en plataformas * nix de forma predeterminada (hay un contenedor pthreads disponible para Windows en Sourceforge). Boost es multiplataforma y es compatible con * nix y Windows por igual. – jalf

+3

Microsoft proporciona pthread encabezados y bibliotecas con sus Servicios para el paquete de Unix. Para Win2K/XP/2003 es una descarga: http://www.microsoft.com/downloads/details.aspx?FamilyID=896C9688-601B-44F1-81A4-02878FF11778 Para Vista/7/2008 es una característica: http://technet.microsoft.com/en-us/library/cc771672.aspx –

6

Boost.Thread usa el concepto RAII para el bloqueo, que hace que las cosas sean más seguras y ayuda a evitar errores como olvidar liberar un mutex.

37

Iré en la dirección opuesta a la de todos los demás: aprende (o al menos familiarízate con lo que está disponible en) pthreads.

Dado que el boost es principalmente solo una envoltura alrededor de pthreads (en plataformas posix), ayuda saber qué está pasando debajo. Al tratar de ser genérico, impulsar deja la funcionalidad específica de la plataforma sin envolver. Para llegar a él, necesita usar las llamadas native_handle(). Para usar las llamadas native_handle(), necesita saber qué ofrece la plataforma.

Piense en ello como enchufes. Hay docenas de clases de socket y frameworks. Pero finalmente envuelven la API de socket de la plataforma subyacente. Tu comprensión es siempre más rica si la conoces y si sabes de qué manera las abstracciones de tu clase pueden tener deficiencias.

+3

¿A qué funcionalidad particular no se puede acceder a través de Boost? – jalf

+5

@jalf pthread attributes - prioridades, etc. Puedes acceder a ellos a través de las llamadas a native_handle() de Thread, Mutex, etc., pero si no sabes un poco sobre pthreads, quizás nunca sepas que están ahí para comenzar . – Duck

+1

Punto justo. Solo desearía que los hubieras mencionado en la publicación en sí. :) También diría que la mayoría de las aplicaciones no deberían tener que preocuparse por la prioridad del subproceso (o la prioridad del proceso, para el caso). Pero tiene razón, si se necesitan estos detalles, la familiaridad con la API subyacente es esencial. – jalf