2010-06-04 22 views
8

Con l'avvento delle funzionalità di threading nell'STL per il nuovo standard C++ (C++ 0x), sarà meglio modificare il codice esistente che utilizza il threading POSIX o anche il threading di Windows per utilizzare il threading STL ?Threading C++ 0x

risposta

5

Puoi sempre proteggere le tue scommesse ... scrivi la tua semplice API di threading che è abbastanza ricca di funzionalità per fare ciò che l'applicazione deve essere eseguita e cambiare il tuo codice per scegliere solo la tua API di threading. Quindi è possibile implementare i componenti interni dell'API di threading personalizzata utilizzando Windows o Posix o STL o altro e modificare l'implementazione ogni volta che è necessario senza dover toccare l'intera base di codici ogni volta.

Facendo in questo modo, è possibile iniziare con l'implementazione STL e quindi se risulta che ad es. Windows ha un problema difficile da risolvere con questo, si può semplicemente includere un'implementazione alternativa dell'API di Windows all'interno di my_threading_api.cpp (all'interno di un #ifdef WIN32) e si ritorna in attività.

+0

Questo è quello che abbiamo fatto. Abbiamo creato il nostro "livello di astrazione del sistema operativo" con diverse implementazioni di backend per POSIX, Windows e alcuni altri RTOS che utilizziamo. Abbiamo anche lezioni per semafori, mutex, timer, ecc. È una cosa molto utile da avere. –

+0

+1: soluzione molto interessante! – Alerty

4

Un grande affare dipenderà da quanto tieni alla portabilità e quanto stai sfruttando le funzionalità che la tua API nativa potrebbe fornire che la libreria standard no. Il threading della libreria standard è sufficientemente simile a quello di POSIX che (per lo meno alla fine) non riesco a pensare a molto di quello che otterresti rimanendo con POSIX (ea causa della somiglianza, il porting per usare la libreria standard dovrebbe essere piuttosto semplice).

Il threading di Windows è abbastanza diverso da avere maggiori probabilità di eseguire in qualcosa che non sarà banale eseguire il porting utilizzando la libreria standard, e anche il migliore porting sarà probabilmente non banale.

2

Non si sa quanto tempo ci vorrà prima che le funzionalità di libreria C++ 0x siano comunemente supportate, quindi la risposta potrebbe dipendere da come è legato a un particolare compilatore che si vorrebbe essere. Si potrebbe anche prendere in considerazione un framework o una libreria che funziona sull'implementazione nativa o C++ 0x della libreria, come Boost Threads o Intel Threading Building Blocks e lasciare che questa libreria gestisca i dettagli se sta usando le funzionalità o la piattaforma C++ 0x API.

3

Non cambiare a meno che non ne abbia davvero bisogno. Presumo che il tuo codice esistente funzioni bene.

2

Dipende.

Il threading di C++ 0x non è ancora ampiamente supportato (credo che GCC lo implementa, ma MSVC no, e non so quando hanno intenzione di aggiungere quel supporto, ma potrei sospettare che considerino è una funzionalità a bassa priorità)

Se il codice funziona così com'è, perché modificarlo? Per le nuove applicazioni C++ e supponendo il supporto del compilatore, sceglierei thread C++ 0x, semplicemente perché sono standard ed è un'API molto migliore rispetto ai thread Win32 o POSIX.