Heim  >  Artikel  >  Backend-Entwicklung  >  Eine vorläufige Studie zur gleichzeitigen Programmierung in C++

Eine vorläufige Studie zur gleichzeitigen Programmierung in C++

WBOY
WBOYOriginal
2023-08-21 22:18:34559Durchsuche

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 61fe42cd48946e53c78c0e2bbfbc7b04 durchgeführt werden. Das Folgende ist ein einfacher Beispielcode mit Multithreading:

#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 e517c9ed30f2300c1c910dc75c8db2c8 in der Standardbibliothek verwenden, um eine Mutex-Sperre zu implementieren. Das Folgende ist ein einfacher Beispielcode, der eine Mutex-Sperre verwendet:

#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 15a199175b5d79b4bf26b73c4a2287fc in der Standardbibliothek verwenden, um atomare Operationen zu implementieren. Hier ist ein einfacher Beispielcode, der atomare Operationen verwendet:

#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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn