std::thread: Zusammenführen und Loslösen
Starten Sie Threads mit std::thread und wählen Sie zwischen join und detach.
std::thread: Zusammenführen und Loslösen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Die Klasse std::thread
Der Header <thread> führte in C++11 Threading in die Standardbibliothek ein. Jede Instanz von std::thread stellt einen Betriebssystem-Thread dar.
Einen Thread erzeugen
Übergeben Sie dem Konstruktor ein aufrufbares Objekt (Funktion, Lambda oder Funktor). Der Thread beginnt sofort mit der Ausführung.
#include <thread>
#include <iostream>
void worker() { std::cout << "running on thread\n"; }
int main() {
std::thread t(worker);
t.join(); // wait for it to finish
}Argumente übergeben
Übergeben Sie Argumente über den Konstruktor an das aufrufbare Objekt.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Übergabe per Referenz
Verwenden Sie std::ref, um Argumente per Referenz zu übergeben. Ohne diese Funktion erhält der Thread Kopien.
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join(): Auf Abschluss warten
Rufen Sie join() auf, um den aufrufenden Thread zu blockieren, bis das Ziel beendet ist. Nach join() ist der Thread nicht mehr joinable.
detach(): Unabhängig ausführen
Rufen Sie detach() auf, um den Thread unabhängig auszuführen. Er läuft weiter, nachdem das std::thread-Objekt zerstört wurde. Der Prozess gibt die Ressourcen frei, sobald der Thread beendet ist.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Prüfen Sie, ob der Thread noch verbunden oder getrennt werden kann. Ein Thread, für den join() oder detach() aufgerufen wurde, ist nicht mehr joinable.
Join vergessen: Programmabbruch
Wenn ein std::thread zerstört wird, während er noch joinable ist, ruft das Programm std::terminate auf. Rufen Sie vor der Zerstörung immer join() oder detach() auf.
RAII-Wrapper
Schreiben Sie einen kleinen RAII-Wrapper, der im Destruktor join() aufruft. Oder verwenden Sie std::jthread (C++20) — er führt join() automatisch aus.
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedHardware-Parallelität
Ermitteln Sie die Anzahl der Hardware-Threads mit std::thread::hardware_concurrency(). Verwenden Sie diesen Wert, um die Größe von Thread-Pools festzulegen.
Thread-IDs
Jeder Thread besitzt eine eindeutige ID. Ermitteln Sie die ID des aktuellen Threads mit std::this_thread::get_id().
Einen Thread schlafen legen
Verwenden Sie std::this_thread::sleep_for(duration), um den aktuellen Thread zu pausieren.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Kurzer Test
Was geschieht, wenn ein joinable std::thread zerstört wird, bevor join() oder detach() aufgerufen wurde?
Zusammenfassung
Erzeugen Sie Threads mit std::thread und einem aufrufbaren Objekt. Rufen Sie immer join() oder detach() auf, bevor das Thread-Objekt zerstört wird — oder verwenden Sie std::jthread (C++20), das automatisch einen Join ausführt.
Häufig gestellte Fragen
Ist die Lektion „std::thread: Zusammenführen und Loslösen“ kostenlos?
Ja — der vollständige Text von „std::thread: Zusammenführen und Loslösen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „std::thread: Zusammenführen und Loslösen“?
Starten Sie Threads mit std::thread und wählen Sie zwischen join und detach. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „std::thread: Zusammenführen und Loslösen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- std::thread: Zusammenführen und Loslösen
- std::mutex, lock_guard und unique_lock
- Bedingungsvariablen und Arbeitermuster
- Grundlagen von std::async und std::future