C++ Academy · Lektion

std::thread – sammenføjning og frakobling

Opret tråde med std::thread, og vælg mellem join og detach

Lektion 1 af 414 trin

std::thread – sammenføjning og frakobling er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Klassen std::thread

Headeren <thread> tilføjede tråde til standardbiblioteket i C++11. Hver std::thread-instans repræsenterer én tråd i operativsystemet.

Oprettelse af en tråd

Giv konstruktøren et kaldbart objekt (funktion, lambda eller funktor). Tråden begynder at køre med det samme.

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

Overførsel af argumenter

Videresend argumenter til det kaldbare objekt gennem konstruktøren.

std::thread t([](int n) { std::cout << n; }, 42);
t.join();

Overførsel som reference

Brug std::ref til at overføre argumenter som referencer. Uden den modtager tråden kopier.

int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter;   // 1

join(): Vent på færdiggørelse

Kald join() for at blokere den kaldende tråd, indtil måltråden er færdig. Efter join kan tråden ikke længere tilsluttes.

detach(): Kør uafhængigt

Kald detach() for at køre tråden uafhængigt. Den fortsætter med at køre, efter at std::thread er destrueret. Operativsystemet frigiver ressourcerne, når tråden afsluttes.

std::thread t([]() { /* background work */ });
t.detach();   // we no longer track it

joinable()

Kontrollér, om tråden kan tilsluttes eller frakobles. En tråd, der er blevet tilsluttet eller frakoblet, kan ikke længere tilsluttes.

Hvis du glemmer join: Programafslutning

Hvis en std::thread destrueres, mens den stadig kan tilsluttes, kalder programmet std::terminate. Tilslut eller frakobl altid tråden, før den destrueres.

RAII-omslag

Skriv et lille RAII-omslag, der tilslutter tråden i destruktøren. Eller brug std::jthread (C++20), som tilslutter den automatisk.

#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyed

Hardwareparallelitet

Forespørg antallet af hardwaretråde med std::thread::hardware_concurrency(). Brug det til at dimensionere trådpuljer.

Tråd-id'er

Hver tråd har et unikt id. Hent den aktuelle tråds id med std::this_thread::get_id().

Sæt en tråd på pause

Brug std::this_thread::sleep_for(duration) til at sætte den aktuelle tråd på pause.

#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);

Hurtigt tjek

Hvad sker der, hvis en tråd, der stadig kan tilsluttes, destrueres, før join() eller detach() kaldes?

Opsummering

Opret tråde med std::thread og et kaldbart objekt. Kald altid join() eller detach(), før trådobjektet destrueres — eller brug std::jthread (C++20), som tilslutter tråden automatisk.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “std::thread – sammenføjning og frakobling” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “std::thread – sammenføjning og frakobling”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “std::thread – sammenføjning og frakobling”?

Opret tråde med std::thread, og vælg mellem join og detach Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “std::thread – sammenføjning og frakobling”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. std::thread – sammenføjning og frakobling
  2. std::mutex, lock_guard og unique_lock
  3. Betingelsesvariabler og arbejdsmønstre
  4. Grundlæggende std::async og std::future
← Tilbage til C++ Academy