std::thread – sammenføjning og frakobling
Opret tråde med std::thread, og vælg mellem join og detach
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; // 1join(): 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 itjoinable()
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 destroyedHardwareparallelitet
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.
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
- std::thread – sammenføjning og frakobling
- std::mutex, lock_guard og unique_lock
- Betingelsesvariabler og arbejdsmønstre
- Grundlæggende std::async og std::future