2010-06-04 18 views
8

Mit dem Aufkommen von Threading-Funktionen in der STL für den neuen C++ - Standard (C++ 0x), wird es besser sein, vorhandenen Code zu ändern, der POSIX-Threading oder sogar Windows-Threading für STL-Threading verwendet ?C++ 0x threading

Antwort

5

Sie könnten Ihre Wetten immer absichern ... Schreiben Sie Ihre eigene einfache Threading-API, die nur so umfangreich ist, dass Ihre Anwendung ausgeführt werden kann, und ändern Sie Ihren Code nur auf Ihre Threading-API. Dann können Sie die Interna Ihrer benutzerdefinierten Threading-API mit Windows oder Posix oder STL oder was auch immer implementieren und die Implementierung jederzeit ändern, ohne jedes Mal die gesamte Codebasis zu berühren.

Auf diese Weise könnten Sie mit der STL-Implementierung beginnen und dann, wenn sich herausstellt, dass z. Windows hat ein schwer zu lösendes Problem. Sie könnten einfach eine alternative Windows-API-Implementierung in my_threading_api.cpp (innerhalb eines #ifdef WIN32) einfügen und Sie wären wieder im Geschäft.

+0

Das haben wir gemacht. Wir haben unsere eigene "OS abstraction layer" mit verschiedenen Backend-Implementierungen für POSIX, Windows und einige andere RTOS, die wir verwenden, erstellt. Wir haben auch Klassen für Semaphore, Mutexe, Timer usw. Es ist eine sehr nützliche Sache zu haben. –

+0

+1: Sehr interessante Lösung! – Alerty

4

Eine Menge hängt davon ab, wie viel Wert auf Portabilität gelegt wird und wie stark Sie die Funktionen nutzen, die Ihre native API bietet, die die Standardbibliothek nicht bietet. Das Standard-Bibliotheks-Threading ist POSIX so ähnlich, dass (zumindest nebenbei) mir nicht viel einfällt, wenn man bei POSIX bleibt (und aufgrund der Ähnlichkeit sollte die Portierung zur Verwendung der Standard-Bibliothek normalerweise ziemlich einfach sein).

Windows Threading ist genug anders, dass Sie eher in etwas stoßen, das nicht trivial sein wird, um die Standardbibliothek zu portieren, und sogar bestenfalls wird die Portierung wahrscheinlich nicht trivial sein.

2

Es ist nicht abzusehen, wie lange es dauern wird, bis die C++ 0x-Bibliotheksfunktionen allgemein unterstützt werden. Die Antwort könnte also davon abhängen, wie stark Sie an einen bestimmten Compiler gebunden sind. Sie sollten auch ein Framework oder eine Bibliothek in Betracht ziehen, die über die native oder C++ 0x-Bibliotheksimplementierung wie Boost Threads oder Intel Threading Building Blocks arbeitet und diese Bibliothek die Details behandeln lässt, ob C++ 0x-Funktionen oder -Plattformen verwendet werden APIs.

3

Nicht ändern, wenn Sie es wirklich brauchen. Ich gehe davon aus, dass Ihr bestehender Code gut funktioniert.

2

Es kommt darauf an.

C++ 0x Threading wird noch nicht allgemein unterstützt (Ich denke GCC implementiert es, aber MSVC nicht, und ich weiß nicht, wann sie diese Unterstützung hinzufügen möchten, aber ich könnte vermuten, dass sie in Betracht ziehen Es ist eine Funktion mit niedriger Priorität)

Wenn Ihr Code so funktioniert wie er ist, warum sollte er geändert werden? Für neue C++ - Anwendungen, und unter der Annahme, Compiler-Unterstützung, würde ich mit C++ 0x-Threads gehen, einfach weil sie Standard sind, und es ist eine viel bessere API als Win32 oder POSIX-Threads.