Ich höre immer wieder von gleichzeitigen Programmierung überall. Kannst du etwas Licht auf das werfen, was es ist und wie C++ neue Standards das gleiche machen?Parallele Programmierung von C++?
Antwort
Parallelität bedeutet, dass Ihr Code mehrere Dinge gleichzeitig ausführt. Dies wird typischerweise mit expliziten "Threads" gemacht, aber es gibt andere Möglichkeiten. Wenn Sie beispielsweise in Ihrem Code OpenMP-Anweisungen verwenden, generiert ein Compiler, der OpenMP unterstützt, automatisch Threads für Sie.
Der Thread ist die Abkürzung für "Thread der Ausführung". In einem single-threaded C++ - Programm beginnt die Ausführung bei main() und wird dann sequenziell fortgesetzt. In einem Multithread-Programm startet der erste Thread bei main, aber zusätzliche Threads können von der Anwendung gestartet werden, die bei einer benutzerdefinierten Funktion starten. Diese laufen dann parallel oder parallel zum ursprünglichen Thread.
In C++ 0x-Threads gestartet wird die std::thread
-Klasse:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
Der neue C++ 0x-Standard unterstützt auch:
- atomare Werte und Operationen mit der
std::atomic<>
Klassenvorlage, - Mutexe für den Datenschutz (
std::mutex
,std::recursive_mutex
, usw.) - Sperrklassen fo r eine einfache Verwaltung von Schloss Lebensdauer (
std::lock_guard<>
,std::unique_lock<>
) std::lock
undstd::try_lock
Funktionen zu verwalten mehrere Schlösser zugleich den Erwerb ohne Deadlock zu riskieren- Bedingungsvariablen für eine Veranstaltung zu erleichtern warten (
std::condition_variable
,std::condition_variable_any
) - Futures , Versprechen und Paketaufgaben, um die Übergabe von Daten zwischen Threads zu vereinfachen und darauf zu warten, dass ein Wert bereit ist. Dies betrifft die klassische Frage "Wie gebe ich einen Wert aus einem Thread zurück".
- Thread-sichere Initialisierung lokaler statische Objekte
- das
thread_local
Stichwort lokale Thread-Daten
Ich habe einen detaillierteren Überblick über die neuen C++ 0x Thread-Bibliothek in meinem Artikel über DevX zu erklären. com: Simpler Multithreading in C++0x
Ich schreibe über Multithreading und Nebenläufigkeit in C++ auf my blog. Ich schreibe auch ein Buch über das Thema: C++ Concurrency in Action.
Kann irgendetwas hinzugefügt werden, jetzt da C++ 11 aus ist? Ich kann mir vorstellen, dass wir jetzt Bewegungssemantik verwenden können? – Damian
Ja, Sie können die move-Semantik mit 'std :: thread' und' std :: async' verwenden. –
Vielleicht das Video könnte helfen, für Sie etwas Licht leuchten :-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
Concurrency mehrere Ausführungs-Threads für einen bestimmten Prozess wird mit. Ab heute unterstützt C++ das nicht direkt. Es existieren jedoch mehrere Bibliotheken, die eine bestimmte Funktion an einen neuen Ausführungsthread binden. Der Unix-Standard ist die Pthreads-Bibliothek.
Der Posix-Standard (nicht Unix) –
Wenn Sie sagen, "wie C++ neue Standards erleichtern" gleichzeitige Programmierung, ich nehme an, Sie sprechen über die bald (?) Zu veröffentlichen C++ 09 Standard.
Der neue Standard, wie es derzeit im Entwurf steht unterstützt die folgenden Elemente, die bei gleichzeitiger Programmierung helfen:
- Atomtypen und Adressen
- eine Thread-Klasse
- thread_local Lagerung (die gerade hinzugefügt wurde in den Normentwurf vor ein paar Monaten)
- gegenseitiger Ausschluss (Mutex-Klassen)
- Zustandsvariablen - das ist besonders schön für Windows, seit condit Ionenvariablen sind in Win32 schwer zu implementieren. Dies bedeutet, dass Microsoft möglicherweise zumindest in der MSVC++ - Laufzeit Unterstützung für Bedingungsvariablen bereitstellen sollte. Daher ist es einfach, die korrekte Semantik der Bedingungsvariablen in WIn32 zu erhalten.
Hat jemand schon eine gute Zusammenfassung über diese Funktionen geschrieben? –
Ich denke, dass sie stark auf boost :: thread basieren, also sollte es keinen großen Unterschied zwischen dieser Dokumentation und dem neuen Standard geben. – gbjbaanb
meine etwas anderen Art, die spezifisch für die zukünftige Ausrichtung von Programmierparadigmen:
Concurrency ist über Ihr Programm zu schreiben, so dass es können mehrere Dinge tun, wenn die Hardware unterstützt wird. Gegenwärtig haben die meisten Sprachen ziemlich schwere und komplizierte Mechanismen, die es dem Programmierer erlauben, dies zu spezifizieren (zB: Threads mit manueller Synchronisation, OpenMP-Preprozessor-Direktiven usw.).
Mit der Verbesserung der Hardware wird es sich horizontal (mehr Kerne) als vertikal (schneller Einzelkern) verbessern. Dies bedeutet, dass Apps "latente Parallelität" haben müssen, um mit "schnellerer" Hardware skalieren zu können. Die Sprachen versuchen derzeit, sich zu entwickeln, um dies bestmöglich zu unterstützen, um in der Position der besten Sprache für die zukünftige Entwicklung zu sein.
C++ 0x fügt mehr integrierte Unterstützung für die "alten" Methoden der Programmierung von Nebenläufigkeit hinzu. Verschiedene Compilerhersteller fügen "neue" Methoden hinzu, die das Threading-Modell abstrahieren und Laufzeitentscheidungen über die Anzahl der Threads usw. erlauben (basierend auf der Hardware der Maschine); für Microsoft insbesondere, siehe F #, Parallelität Laufzeit, parallele Erweiterungen, etc.
Hoffe, dass hilft.
C++ CSP2 - Easy Concurrency für C++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP ist auf einem richtigen gleichzeitig Paradigma eine Basis im Gegensatz zu Fäden und Schlösser und alle anderen Arten von Dingen, die auf wie ein nachträglicher Einfall geheftet werden .
(siehe Occam-Pi für eine gleichzeitige Programmiersprache (auch auf Basis von CSP))
Artikel: diese Artikel prüfen über Gleichzeitigkeit
Fügen Sie eine Zusammenfassung der wichtigsten Punkte der Artikel hinzu, oder ist dies eine [Link-only-answer] (http://meta.stackexchange.com/questions/72000/should-there-bea- Richtlinie-über-nur-Link-nur-Antworten)? (Einer der Links ist bereits tot, btw.) – jogojapan
Dies ist Der beste Artikel, um gleichzeitige Programmierung zu verstehen: Concurrent Programming
Sie erhalten das volle Bild der gleichzeitigen Programmierung und C++ nach dem Lesen.
Als kurze Zusammenfassung können wir sagen, dass gleichzeitige Programmierung Multitasking ist. Wenn ein Programm blockiert wird, kann es andere Dinge tun. Normalerweise werden wir blockiert, während wir auf Netzwerkverbindungen warten und mit I/O arbeiten. Wir können die gleichzeitige Programmierung mit fork()
und Thread-Bibliotheken erleichtern.
Der Link, den Sie gepostet haben, gibt eine 404 zurück. – xyres
- 1. Parallele Programmierung in C#
- 2. C# zu VB.NET Framework 4 parallele Programmierung
- 3. Parallele Programmierung auf Binärbaum
- 4. Parallele Programmierung in Julia
- 5. Nodejs Parallele Programmierung mit Threads
- 6. Parallele Programmierung mit rekursiven Funktionen?
- 7. HttpWebRequest Parallele Programmierung Handle Exception
- 8. Parallele dynamische Programmierung Travel Salesman
- 9. Parallele Programmierung in go mit GOMAXPROCS
- 10. Parallele Programmierung in Python (verschachtelte Schleife)
- 11. Parallele Programmierung mit GPU in R
- 12. Parallele Schleifen in C++
- 13. Parallele Pipeline in C#
- 14. Parallele Zuweisung in C++
- 15. Parallele Array-Verarbeitung C++
- 16. Wie kann man multi-threaded parallele Programmierung lernen?
- 17. Perl - parallele Programmierung - zwei externe Programme laufen lassen
- 18. "peinlich parallele" Programmierung mit Python und PBS auf einem Cluster
- 19. C-Programmierung, Array von Zeichenzeigern
- 20. C++ Programmierung
- 21. C# Aufgabe parallele Bibliothek und NHibernate/Spring.NET
- 22. Parallele API für C/C++ unter Windows
- 23. C: UDP-Socket Programmierung
- 24. C++ grafische Programmierung
- 25. Android C++ - Programmierung
- 26. Cocoa Programmierung in C?
- 27. COM (C++) Programmierung Tutorials?
- 28. C++ - Generische Programmierung - Typauswahl
- 29. Eingebettete c Programmierung
- 30. C++ verteilte Programmierung
Wenn Concurrent Computing neu für Sie ist, stellen Sie sicher, einige grundlegende Artikel wie http://en.wikipedia.org/wiki/Concurrent_programming zu überprüfen. – lothar