Mit der kontinuierlichen Verbesserung der Leistung der Computerhardware wird der Bedarf der Menschen an Multi-Core-Verarbeitung immer stärker. Gleichzeitig bieten moderne Betriebssysteme auch eine immer umfassendere Unterstützung der gleichzeitigen Programmierung, was die gleichzeitige Programmierung zu einem unverzichtbaren Bestandteil des Programmierbereichs macht. In diesem Zusammenhang stellt C++ als weit verbreitete Hochleistungsprogrammiersprache auch viele leistungsstarke Tools und Bibliotheken für die gleichzeitige Programmierung bereit.
In diesem Artikel werden einige grundlegende Konzepte und Techniken der gleichzeitigen C++-Programmierung vorgestellt und deren Verwendung anhand eines einfachen Beispielcodes demonstriert.
Multi-Threading-Grundlagen
Multi-Threading ist ein häufig verwendetes gleichzeitiges Programmiermodell, das es einem Programm ermöglicht, mehrere Befehlsströme gleichzeitig auszuführen. In C++ kann die Multithread-Programmierung über die Header-Datei
#include <iostream> #include <thread> void hello() { std::cout << "Hello" << std::endl; } int main() { std::thread t(hello); t.join(); return 0; }
Dieser Code definiert eine Funktion namens hello, die die Zeichenfolge „Hello“ ausgibt. In der Hauptfunktion erstellt das Programm einen neuen Thread t und verwendet die Hallo-Funktion als Ausführungsfunktion des Threads. Die t.join()-Anweisung wartet, bis die Ausführung des Threads abgeschlossen ist, bevor sie das Programm beendet.
Mutex-Sperre
Aufgrund der gleichzeitigen Ausführung mehrerer Threads kann gleichzeitig auf dieselben gemeinsam genutzten Ressourcen zugegriffen werden. Zu diesem Zeitpunkt ist ein Mechanismus erforderlich, um sicherzustellen, dass jeweils nur ein Thread auf die gemeinsam genutzte Ressource zugreifen kann. Dieser Mechanismus ist eine Mutex-Sperre.
In C++ können Sie die Header-Datei
#include <iostream> #include <thread> #include <mutex> std::mutex m; int sum = 0; void add() { m.lock(); sum += 1; m.unlock(); } int main() { std::thread t1(add); std::thread t2(add); t1.join(); t2.join(); std::cout << "sum = " << sum << std::endl; return 0; }
Dieser Code definiert eine Funktion namens add, die die globale Variablensumme um 1 erhöht. In der Hauptfunktion erstellt das Programm zwei neue Threads t1 und t2 und verwendet die Add-Funktion als Ausführungsfunktion. Da sum eine gemeinsam genutzte Ressource ist, wird in der Add-Funktion eine Mutex-Sperre m verwendet, um sicherzustellen, dass der Zugriff auf sum threadsicher ist.
Atomic-Operation
Atomic-Operation ist eine spezielle Operation, die gemeinsam genutzte Ressourcen ohne Sperre aktualisieren oder lesen kann. In C++ können Sie die Header-Datei
#include <iostream> #include <thread> #include <atomic> std::atomic<int> sum(0); void add() { sum += 1; } int main() { std::thread t1(add); std::thread t2(add); t1.join(); t2.join(); std::cout << "sum = " << sum << std::endl; return 0; }
Dieser Code definiert eine atomare Variable namens sum, deren Anfangswert 0 ist. In der Additionsfunktion wird die atomare Operation sum += 1 verwendet, um den Wert von sum um 1 zu erhöhen. In der Hauptfunktion erstellt das Programm zwei neue Threads t1 und t2 und verwendet die Add-Funktion als Ausführungsfunktion. Da sum eine atomare Variable ist, kann die atomare Operation sum += 1 die Thread-Sicherheit gewährleisten.
Zusammenfassung
Dieser Artikel stellt die Grundlagen der gleichzeitigen Programmierung in C++ vor, einschließlich Multithreading, Mutex-Sperren und atomaren Operationen. Natürlich bietet C++ weit mehr Tools und Bibliotheken für die gleichzeitige Programmierung als diese, wie z. B. Bedingungsvariablen, Semaphoren, Thread-Pools usw. In tatsächlichen Projekten ist die Auswahl geeigneter Tools und Bibliotheken für die gleichzeitige Programmierung von großer Bedeutung, um die Korrektheit des Programms sicherzustellen und die Programmleistung und Wartbarkeit zu verbessern.
Das obige ist der detaillierte Inhalt vonEine vorläufige Studie zur gleichzeitigen Programmierung in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!