2010-01-31 11 views
21

Non avendo esperienza con il threading in passato, quale tecnica di threading in C++ sarà la più facile per un principiante? boost :: thread o pthreads?PThread vs boost :: thread?

+0

Non l'ho ancora usato, ma ho esaminato la documentazione per entrambi. Boost è più compatibile, ma il pthread è molto più semplice da utilizzare. –

+0

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

risposta

33

Vai per boost :: thread. È closely related per il lavoro sul prossimo C++ standard threads, e l'interfaccia è abbastanza facile da usare e idiomatica per C++ (RAII invece di gestione delle risorse manuale).

9

boost :: thread è un'astrazione molto carina e portatile. Lo userò sicuramente, ma imparerò anche l'API del thread nativo, come pthreads, in modo da sapere come funziona il threading sulla tua piattaforma.

2

Direi che sono abbastanza vicini alla pari in difficoltà. L'unica grande differenza che vedo è che PThreads sono ampiamente supportati (se si è interessati al porting multipiattaforma). Un altro è che ci sono stati parecchi buoni libri su PThreads, anche se quasi tutti i concetti verranno tradotti in boost :: thread e molte altre librerie di threading.

+1

sono disponibili solo su piattaforme * nix per impostazione predefinita (è disponibile un wrapper pthreads per Windows su Sourceforge). Boost è multipiattaforma e supportato su * nix e Windows allo stesso modo. – jalf

+3

Microsoft fornisce intestazioni e librerie pthread con i relativi pacchetti Services for Unix. Per Win2K/XP/2003 è un download: http://www.microsoft.com/downloads/details.aspx?FamilyID=896C9688-601B-44F1-81A4-02878FF11778 Per Vista/7/2008 è una funzionalità: http://technet.microsoft.com/en-us/library/cc771672.aspx –

6

Boost.Thread utilizza il concetto RAII per il blocco, il che rende le cose più eccezionalmente sicure e aiuta a evitare bug come dimenticare di rilasciare un mutex.

37

Andrò nella direzione opposta a tutti gli altri - impara (o almeno familiarizza con ciò che è disponibile in) pthreads.

Poiché boost è principalmente solo un wrapper su pthreads (su piattaforme posix) aiuta a sapere cosa sta succedendo sotto. Nel tentativo di essere generico, boost lascia la funzionalità specifica della piattaforma scartata. Per raggiungerlo devi usare le chiamate native_handle(). Per poter utilizzare le chiamate native_handle() è necessario sapere cosa offre la piattaforma.

Pensateci come prese. Esistono dozzine di classi di socket e framework. Ma alla fine avvolgono l'API socket della piattaforma sottostante. La tua comprensione è sempre più ricca sapendolo - e sapendo in che modo le astrazioni di classe potrebbero avere scarti.

+3

Quale particolare funzionalità non è possibile accedere tramite Boost? – jalf

+5

@jalf pthread attributi - priorità, ecc. Puoi ottenerli tramite le chiamate native_handle() di Thread, Mutex, ecc., Ma se non conosci un po 'di pthreads potresti non sapere mai che sono lì per cominciare . – Duck

+1

Punto giusto. Vorrei solo che li avessi menzionati nel post stesso. :) Direi anche che la maggior parte delle app non dovrebbe preoccuparsi della priorità del thread (o della priorità del processo, se è per questo). Ma hai ragione, se e quando questi dettagli sono necessari, la familiarità con l'API sottostante è essenziale. – jalf