Stand: 26.08.2025
TL;DR
In diesem Tutorial lernen Sie die Grundlagen des Threadings in C++ kennen, einschließlich der Erstellung von Threads, der Synchronisation und der Verwendung von Mutexen. Wir bieten Ihnen praktische Codebeispiele, um diese Konzepte zu veranschaulichen.Illustration: c++ fortgeschrittene: Threading + überwiegend Code beispiele. So lang und ausführlich wie möglich
Einführung in das Threading
Threading ist eine Möglichkeit, mehrere Aufgaben gleichzeitig auszuführen. In C++ können Sie Threads mit der Standardbibliothek erstellen, was es einfach macht, Multithreading in Ihren Anwendungen zu integrieren.
Was ist ein Thread?
Ein Thread ist der kleinste Teil eines Programms, der unabhängig ausgeführt werden kann. Threads teilen sich den gleichen Speicherraum, was bedeutet, dass sie effizienter kommunizieren können, aber auch Synchronisationsmechanismen benötigen, um Datenkorruption zu vermeiden.Illustration: c++ fortgeschrittene: Threading + überwiegend Code beispiele. So lang und ausführlich wie möglich
Erstellen von Threads in C++
Um einen Thread in C++ zu erstellen, verwenden wir die std::thread-Klasse. Hier ist ein einfaches Beispiel:
#include <iostream>
#include <thread>
void hello() {
std::cout << "Hallo von Thread!" << std::endl;
}
int main() {
std::thread t(hello);
t.join(); // Warten auf den Thread, bis er fertig ist
return 0;
}Erklärung des Codes
std::thread t(hello);erstellt einen neuen Thread, der die Funktionhelloausführt.t.join();wartet, bis der Thread die Ausführung beendet hat, bevor das Hauptprogramm fortgesetzt wird.
Thread-Synchronisation
Wenn mehrere Threads auf gemeinsame Ressourcen zugreifen, ist Synchronisation notwendig, um Datenkorruption zu vermeiden. Eine der gängigsten Methoden ist die Verwendung von Mutexen (Mutual Exclusion).
Verwendung von Mutexen
Hier ist ein Beispiel, wie Sie einen Mutex verwenden können:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print_block(int n, char c) {
mtx.lock(); // Sperren des Mutex
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << std::endl;
mtx.unlock(); // Freigeben des Mutex
}
int main() {
std::thread t1(print_block, 50, '*');
std::thread t2(print_block, 50, '#');
t1.join();
t2.join();
return 0;
}Erklärung des Mutex-Codes
- Wir definieren einen Mutex
mtx. - Der Mutex wird vor dem Zugriff auf die gemeinsame Ressource (in diesem Fall die Konsole) gesperrt.
- Nach dem Zugriff wird der Mutex freigegeben.
Fortgeschrittene Synchronisationsmethoden
Es gibt mehrere fortgeschrittene Synchronisationsmethoden, die Sie in C++ verwenden können, darunter std::lock_guard und std::unique_lock.
Verwendung von std::lock_guard
std::lock_guard ist eine RAII-basierte Lösung, die automatisch den Mutex freigibt, wenn das Objekt aus dem Gültigkeitsbereich geht:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print_block(int n, char c) {
std::lock_guard<std::mutex> lock(mtx); // Sperren des Mutex
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << std::endl;
}
int main() {
std::thread t1(print_block, 50, '*');
std::thread t2(print_block, 50, '#');
t1.join();
t2.join();
return 0;
}Zusammenfassung
In diesem Tutorial haben wir die Grundlagen des Threadings in C++ behandelt. Sie haben gelernt, wie man Threads erstellt und synchronisiert sowie verschiedene Synchronisationsmethoden verwendet. Threading kann die Leistung Ihrer Anwendungen erheblich verbessern, wenn es richtig eingesetzt wird.
Hinweis & Quellen
Für weiterführende Informationen und Beispiele empfehlen wir die offizielle C++-Dokumentation sowie Online-Communities und Tutorials. Es ist wichtig, die Konzepte des Threadings zu verstehen, um die Leistung und Stabilität Ihrer Anwendungen zu gewährleisten.
Illustration: c++ fortgeschrittene: Threading + überwiegend Code beispiele. So lang und ausführlich wie möglich