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?
risposta
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).
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.
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.
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
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 –
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.
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.
Quale particolare funzionalità non è possibile accedere tramite Boost? – jalf
@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
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
Non l'ho ancora usato, ma ho esaminato la documentazione per entrambi. Boost è più compatibile, ma il pthread è molto più semplice da utilizzare. –
Utile: http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/overview/networking/bsd_sockets.html I pthreads –