0Pricing
C++ Academy · Lektion

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;   // 1

join(): 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 it

joinable()

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 destroyed

Hardware-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

  1. std::thread: Zusammenführen und Loslösen
  2. std::mutex, lock_guard und unique_lock
  3. Bedingungsvariablen und Arbeitermuster
  4. Grundlagen von std::async und std::future
← Zurück zu C++ Academy