2010-01-31 20 views
21

Haben Sie keine Erfahrung mit Threading in der Vergangenheit, welche Threading-Technik in C++ ist für Anfänger am leichtesten? boost :: thread oder pthreads?PThread vs boost :: thread?

+0

Ich habe noch nicht benutzt, aber ich habe die Dokumentation für beide angeschaut. Boost ist kompatibler, aber Pthread ist viel einfacher zu verwenden. –

+0

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

Antwort

33

Gehen Sie für boost :: thread. Es ist closely related zur Arbeit an der bevorstehenden C++ standard threads, und die Schnittstelle ist recht einfach zu bedienen und idiomatisch zu C++ (RAII anstelle der manuellen Ressourcenverwaltung).

9

boost :: thread ist eine sehr schöne und tragbare Abstraktion. Ich würde es sicherlich verwenden, aber auch den nativen Thread api lernen, wie Pthreads, damit Sie wissen, wie Threading auf Ihrer Plattform funktioniert.

2

Ich würde sagen, dass sie ziemlich nahe in Schwierigkeiten gleich sind. Der einzige große Unterschied, den ich sehe, ist, dass PThreads ziemlich weit verbreitet sind (wenn es um Cross-Plattform-Portierung geht). Ein anderes ist, dass es einige gute Bücher über PThreads gab, obwohl fast alle Konzepte auf boost :: thread und viele andere Threading-Bibliotheken übertragen werden.

+1

Pthreads sind standardmäßig nur auf * nix-Plattformen verfügbar (es ist ein Pthreads-Wrapper verfügbar für Windows auf Sourceforge). Boost ist plattformübergreifend und wird sowohl auf * nix als auch auf Windows unterstützt. – jalf

+3

Microsoft stellt Pthread-Header und Bibliotheken mit ihrem Services for Unix-Paket zur Verfügung. Für Win2K/XP/2003 ist es ein Download: http://www.microsoft.com/downloads/details.aspx?FamilyID=896C9688-601B-44F1-81A4-02878FF11778 Für Vista/7/2008 ist es eine Funktion: http://technet.microsoft.com/en-us/library/cc771672.aspx –

6

Boost.Thread verwendet das RAH Konzept zur Verriegelung, die mehr Dinge Ausnahme sicher macht und hilft, Fehler zu vermeiden, wie ein Mutex freizugeben, zu vergessen.

37

Ich werde in der entgegengesetzten Richtung von jedem gehe andere - lernen (oder zumindest machen Sie sich mit dem, was in verfügbar ist) pThreads.

Da boost ist in erster Linie nur ein Wrapper um pThreads (auf Posix-Plattformen) es hilft zu wissen, was darunter passiert. Beim Versuch, generisch zu sein, lässt boost die Plattform spezifische Funktionalität unverpackt. Um dorthin zu gelangen, müssen Sie die native_handle() -Aufrufe verwenden. Um die native_handle() - Aufrufe zu verwenden, müssen Sie wissen, was die Plattform bietet.

Betrachten Sie es wie Steckdosen. Es gibt Dutzende Socket-Klassen und Frameworks. Aber schließlich wickeln sie die Socket-API der zugrunde liegenden Plattform um. Dein Verständnis ist immer reicher, wenn du es weißt - und zu wissen, auf welche Weise deine Klassen-Abstraktionen ein kurzes Kommen haben könnten.

+3

Welche bestimmte Funktionalität können Sie nicht über Boost zugreifen? – jalf

+5

@jalf pthread Attribute - Prioritäten, etc. Sie können sie über die native_handle() -Aufrufe von Thread, Mutex usw. erreichen, aber wenn Sie nicht ein wenig über Pthreads wissen, werden Sie vielleicht nie wissen, dass sie da sind, um damit zu beginnen . – Duck

+1

Messepunkt. Ich wünschte nur, du hättest sie in der Post selbst erwähnt. :) Ich würde auch sagen, dass die meisten Apps sich nicht um Thread-Priorität (oder Prozesspriorität, für diese Angelegenheit) kümmern sollten. Aber Sie haben Recht, wenn und wenn diese Details benötigt werden, ist die Vertrautheit mit der zugrunde liegenden API unerlässlich. – jalf