2010-04-01 18 views
24

Sto cercando una libreria di threading multipiattaforma facile da usare scritta in C++.Esiste una libreria di threading multipiattaforma in C++?

Qual è il tuo parere su boost::thread o Pthreads? Il Pthreads funziona solo su sistemi conformi a POSIX?

E il supporto per il threading nella libreria Qt?

+4

Se si considera Boost.Threads o Qt, è necessario rimuovere il tag 'C'. – sbi

+3

Senza contare che non esiste un linguaggio di programmazione chiamato C/C++. Come puoi vedere qui, il termine porta alla confusione. –

risposta

33

Boost.Thread è la bozza della prossima libreria di threading standard del linguaggio C++. Sapendo questo, preferisco usarlo in quanto fornisce alcune forti garanzie (perché diventa standard).

Aggiornamento: Ora che abbiamo le librerie di threading standard, altre precisioni. Alcuni costrutti boost, come boost :: shared_mutex, non sono stati standardizzati (ma potrebbero essere successivi). Tuttavia la libreria standard sfrutta meglio la mossa semantica. Buono a sapersi prima di scegliere una biblioteca. Inoltre, l'uso della libreria di threading C++ 11 richiede un compilatore che lo fornisce. Oggi non è il caso di tutti i compilatori.

Aggiornamento: Ora [Nov2012] la maggior parte dei compilatori standard fornisce la libreria di threading C++ 11. VS2012, GCC4.8 e Clang3.1 supportano i thread e le primitive di sincronizzazione e le operazioni atomiche. Per l'implementazione completa è anche possibile utilizzare solo thread di Anthony Williams. È compatibile con C++ 11 supportata su Windows/Mac e Linux.

Link per lo stato di C++ 11 caratteristiche con diversi compilatori:

+0

So che questa risposta è vecchia, ma vorrei aggiungere che gcc 4.6 non compilerà Boost.Thread in modalità C++ 11.Questo potrebbe essere un problema in ognuno di essi, ma molto probabilmente gcc, dal momento che il supporto per C++ 11 è in fase di sviluppo al momento. –

+0

Aggiungo che devi ancora avere un compilatore che fornisce la libreria di threading standard per usarlo, o altrimenti fare affidamento su boost. – Klaim

0

SDL è semplice, multipiattaforma e dispone di supporto per la filettatura.

+0

SDL è piuttosto una libreria multimediale, vero? Preferirei avere qualcosa di più pulito. – NumberFour

4

Pthreads sono in esecuzione solo su sistemi POSIX. QThread da Qt è un modo per andare. È disponibile su piattaforme: Linux, Mac OS X, Windows, Embedded Linux, Windows CE, Symbian, Maemo.

+2

Cosa intendi dire "Tutte le piattaforme" – osgx

+3

Sì, ho questo chip qui nel mio tostapane, Qt è disponibile per questo? ':' – sbi

+0

Ufficialmente supportato, win/mac/unix + x/embedded unix/wince/symbian/meamo - Probabilmente più che boost. –

2

Qt ha un buon supporto per i thread. Se hai solo bisogno di creare una discussione ed eseguire del codice, QThread è tutto ciò di cui hai bisogno. Esistono molte altre classi di alto livello che possono aiutarti con i pool di thread o anche astrarre l'esecuzione simultanea (il framework QtConcurrent).

+1

Qt possiede una buona libreria di threading; funziona molto bene per le applicazioni Qt dal momento che puoi connettere segnali attraverso i thread. Se stai usando elementi Qt, rimango con i thread Qt. – Will

0

Pthread fa parte di Posix, ma non tutti i sistemi POSIX avranno thread. pthreads è più portabile.

Quali piattaforme supporterete?

+0

Bene, Pthreads non ha problemi con Linux e altri sistemi Unix che presumo. Ma che dire di Pthreads su Windows? – NumberFour

+0

Uso pthreads su Windows (compilato in cygwin). Quindi c'è supporto. –

8

C'è un libreria di threading in arrivo con C++ 11. È basato sulla libreria di thread boost. Sfortunatamente, mi sembra di ricordare che ci sono differenze non banali tra Boost.Threads e C++ 11. Tuttavia, se prevedi di passare alla libreria di threading standard C++, credo che Boost.Threads sia il più vicino a cui puoi arrivare ora.

Suppongo che, sotto il cofano, queste librerie utilizzino Pthreads su sistemi POSIX e qualunque supporto di threading nativo sia disponibile altrove.

Disclaimer: Non ho lavorato con nessuno dei due.

4

Anche dare un'occhiata a OpenMP, è un insieme di (un po 'standard) pragma s specifiche supportato da most major compilers. Il vantaggio di OpenMP è che è semplice e che il tuo codice può essere facilmente compilato in entrambe le versioni single e multi-threaded.

Basta un semplice esempio:

std::vector<double> a, b; 
... 
double sum = 0.0; 
... 
#pragma omp parallel for reduction(+:sum) 
    for (i=0; i < n; i++) 
    sum = sum + (a[i] * b[i]); 

E 'ovviamente possibile fare anche morecomplexthings.

+0

OpenMP è supportato anche su Windows? – NumberFour

+0

Sì, OpenMP è supportato su Windows, da Visual Studio 2005 e versioni successive e, naturalmente, dai compilatori Intel. –

+0

E non dovrebbe introdurre alcuna dipendenza. – baol

1

wxWidgets ha classi thread e, poiché wxWidgets è indipendente dalla piattaforma, potrebbe essere la cosa migliore per voi.

2

Elencare le piattaforme interessate. Se stai usando solo say, Linux/Mac/Windows, quindi boost :: thread probabilmente andrà bene fino a quando C++ 0x (harhar) fornisce std :: thread.

1

Boost.Threads è basato su PThreads su sistemi UNIX e Thread Win32 su Windows.

La libreria boost è sintatticamente semplice e tutto il faticoso business dell'interfacciamento del codice C++ con le librerie C è curato dietro le quinte. Se non sei molto a tuo agio con C++, tuttavia, PThreads potrebbe sembrare più semplice con la sua semplice API C.

Qt Threads è anche una buona libreria, ma poiché utilizzo diverse altre librerie di boost, compilerò e collegherò a Boost non importa quale. Potrei non sempre collegarmi a Qt. E, beh, non voglio ricordare come usare due diverse librerie.

2

Ho usato pthread per codice che funziona su più piattaforme. Per aggirare la mancanza di Windows di pthreads, ho usato la seguente libreria open source con grande successo: POSIX Threads for Windows

+0

pthreads-w32 è vecchia scuola. mingw-w64 fornisce una versione migliorata chiamata winpthreads. – cap

3

Mi sorprende che nessuno ha menzionato il Intel TBB library (legato ad un un'altra risposta di miniera). Inoltre, un task-based implementation should be preferred su un thread-based.

+0

Sì, anche il futuro modello asincrono in C++ 11 è abbastanza facile da usare. Solo per Windows PPL è molto simile a TBB ed è ben supportato da MS – Sarang

Problemi correlati