Pthreads in Visual C++
Ich bin das Experimentieren mit multithreading in Windows und Frage mich, ob ich sollte
- verwenden Win32-API
- verwenden POSIX-Threads für Windows
Lernen Pthreads nützlich sein würde, wenn ich versuchte, um die Entwicklung solcher Anwendungen auf unterschiedlichen Plattformen - aber bin ich etwas zu verlieren, indem Sie nicht lernen Win32-API? Oder beide sind ähnlich genug, so dass lernen ermöglicht es mir, um herauszufinden, die andere leicht?
- Sie könnten die Verwendung von Boost.Thread, wenn das möglich ist. Es funktioniert auf die gleiche für alle Plattformen (es unterstützt alle wichtigen Plattformen).
- Wenn Sie Experimentieren, dann die POSIX-Threads für die Windows-Bibliothek kann sehr hilfreich sein für die Gründe, die Sie erwähnen. Wenn Sie freigeben möchten, ein Produkt, dann haben Sie zu prüfen, ob die LGPL-Lizenz ist kompatibel mit wie den Sie freigeben möchten, Ihr Produkt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Boost-Threads. Wenn C++0x kommt entlang, wir haben std::threads. Boost-threads hat die nächste Durchführung std-threads.
sonst mit pthreads. Pthreads ist die zweite am nächsten std::threads, und bildete die wichtigste Grundlage des std-threads und boost-threads.
sonst windows-threading-direkt. Sie können noch lernen, wie threads funktionieren und bilden Sie ein mentales Modell der Dinge. Neigt man eben dazu zu verwenden synchronisierungsprimitiven, die sind ein bisschen non-standard.
Wenn du gehst, viel zu tun, Windows-Programmierung, es wird sich lohnen zu lernen, die grundlegenden Win32-threading-Konstrukte: kritische Abschnitte, interlocked-Funktionen
CreateThread
,WaitFor*Object
usw. Diese sind nicht schwer zu verstehen, und Sie übersetzen, transparent äquivalente Objekte in anderen threading-frameworks.Jedoch für den fortgeschrittenen threading-Konstrukte wie Semaphoren, Ereignisse, etc., Ich würde das
pthreads
Bibliothek, da die Dokumentation für diese neigt dazu, klarer zu werden und die Beispiele reichlicher.Wenn du mit C/C++, verwenden Sie die thread-Funktionen der C/C++ - runtime.
Wenn Sie die Win32 - (oder andere nicht-CRT-Funktionen, threads zu erstellen) der CRT möglicherweise nicht richtig initialisiert werden in den neuen thread, so dass alle Arten von Problemen (Sie können darüber Lesen Sie hier: http://www.codeguru.com/forum/archive/index.php/t-371305.html).
Aber die meisten thread-Funktionen (in der CRT, Win32 oder pthread) basieren alle auf der Funktionalität, threads zu erstellen, synchronisieren von threads und zerstören threads. In der Praxis ist dies nicht immer ganz einfach zu verwenden.
Im letzten Jahr, gibt es einen trend zu gehen, um den task-based threading (gut, ich nenne es so, ich weiß nicht, was der offizielle name ist). Stattdessen beginnt ein thread, und dann ausführen einer bestimmten Logik, in der task-based threading erstellen Sie eine Aufgabe und dann Fragen die 'threading-Logik" zum ausführen der Aufgabe.
Systeme unterstützen diese neue Art zu arbeiten mit threads:
Visual Studio 2010 hat sogar (wie es scheint) spezielle debugging-Logik zu Debuggen, die "parallele Aufgaben".
Werfen Sie einen Blick auf std::thread
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2184.html
Und eine Einführung
http://www.devx.com/SpecialReports/Article/38883
Habe ich herausgefunden, dass kleben mit pthreads erspart mir die Vernunft auf drei zählt:
WinAPI-docs, die nicht gewohnheitsmäßig
jede Qualität.
helfen können
pthreads. Ich habe festgestellt, unendlich viel mehr gute Quellen für Informationen über online-pthreads.
kompliziert ist, das "Hallo Welt" mit
die WinAPI, ich finde es dauert viel
mehr, als man vernünftigerweise
erwarten. Das ist nur meine empirische
Eingang, obwohl.
Soweit-Fähigkeiten betrifft, habe ich nie gefunden pthreads fehlt an nichts, so dass ich glaube nicht, dass ich überhaupt gefunden habe, die müssen Sie woanders suchen. Es gibt auch eine Menge zu sagen für die lernen eine Bibliothek, dass Sie werde in der Lage sein, für den Einsatz in jeder Umgebung, die Sie angehen.