des rückwärts Beginnen wir:
Wie ist es möglich, Einfädeln in einer Bibliothek zu implementieren?
Es ist nicht, zumindest nicht in (reinem) C++. Dies erfordert Sprache Unterstützung (der Compiler ist nur eine Implementierung).
Im Moment 2 Dinge verwendet werden:
- Assembler-Code für einige Teile (wie in der
pthread
Bibliothek)
- spezifische Compiler Anweisungen für andere (abhängig von den Compiler und Plattform)
Beide sind spröde und erfordern eine enorme Arbeit für die Portabilität. Grundsätzlich bedeutet es viele #ifdef
Teile im Code für den Compiler und Zielarchitektur zu testen, für die Unterstützung einiger Richtlinien usw. testen ...
Deshalb wurde es als notwendig erachtet, Threading-Unterstützung in C++ 0x hinzuzufügen .
Wie mache ich Multithreading?
Bevor Sie eine Bibliothek auswählen, sollten Sie eine Methode auswählen. Es gibt 2 Möglichkeiten der Programmierung Multithreading-Anwendungen (und Sie können sie kombinieren):
- von teilen Kommunizieren: Das bedeutet, mit mutexes, atomare Operationen, etc ... Sie
pthread
auf Linux-Plattformen verwenden können, aber ich würde unter anderem Boost.Thread
für seine Portabilität empfehlen.
- Teilen durch Kommunikation: neuere und an verteilte Berechnungen angepasst, stammt dies aus den funktionalen Sprachen. Dies bedeutet, dass Nachrichten von einem Thread an einen anderen weitergegeben werden und keine Ressourcen freigegeben werden. Sie können FastFlow oder Intels Thread Building Blocks aka
TBB
verwenden.
Sie können die beiden möglicherweise verschmelzen, aber es wäre besser, nicht zu. Persönlich habe ich die Beschreibung von FastFlow total genial gefunden: es fördert lock-freie Programmierung. Der Hauptvorteil der zweiten Methode besteht darin, dass sie besser für die Programmierung von mehreren Prozessen geeignet ist und auf verteilte Umgebungen skaliert werden kann.
Zunächst würde ich empfehlen, sich auf beide zu konzentrieren und einige Anwendungen damit zu bauen. Wenn Sie sich wohl fühlen, können Sie den anderen ausprobieren, aber seien Sie bereit, neu anzufangen, sie sind so anders.
Als ein Wort der Vorsicht müssen Sie viel mehr über Thread-Sicherheit in C++ nachdenken. Man kann nicht einfach Schlüsselwörter für Klassenmethoden streuen, um sie threadsicher zu machen. Sie werden in der Regel Werkzeuge wie Mutexe oder andere Formen kritischer Abschnitte, atomare Operationen usw. verwenden. Sie werden jedoch in der Lage sein, sehr effizienten Multithread-Code zu schreiben, wenn Sie es richtig machen. Sie können sogar Ihre eigenen Speicherzuordner mit Speicherpools pro Thread schreiben, aber es ist viel niedriger und viel schwieriger zu schreiben als Java. – stinky472
(+1) @ stinky472: Genau deshalb möchte ich Multithreading sowohl in C++ als auch in Java lernen. Ich finde, dass Java generell gut für High-Level-Intros zu vielen Themen ist, aber nur mit Java zu bleiben, kann der Programmierer ein bisschen zu viel werden und sie nicht einigen sehr wichtigen Konzepten aussetzen. Deshalb, während ich Multithreading in Java lerne, möchte ich es gleichzeitig in C++ lernen, um sicherzustellen, dass ich alles lerne, was ich sein sollte. – Cam