std::thread: join e detach
Avvii thread con std::thread e scelga tra join e detach
std::thread: join e detach è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
La classe std::thread
L'header <thread> ha introdotto il supporto ai thread nella libreria standard con C++11. Ogni istanza di std::thread rappresenta un thread del sistema operativo.
Creazione di un thread
Passi al costruttore un oggetto richiamabile, come una funzione, una lambda o un funtore. Il thread inizia immediatamente l'esecuzione.
#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
}Passaggio degli argomenti
Inoltri gli argomenti all'oggetto richiamabile tramite il costruttore.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Passaggio per riferimento
Utilizzi std::ref per passare gli argomenti per riferimento. Senza di esso, il thread riceve delle copie.
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join(): attesa del completamento
Chiami join() per bloccare il thread chiamante finché il thread di destinazione non termina. Dopo join(), il thread non è più joinable.
detach(): esecuzione indipendente
Chiami detach() per eseguire il thread in modo indipendente. Il thread continua a essere eseguito dopo la distruzione di std::thread. Le risorse vengono rilasciate dal sistema operativo quando il thread termina.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Verifichi se il thread può essere sottoposto a join() o detach(). Un thread a cui è stato applicato join() o detach() non è più joinable.
Dimenticare join(): terminazione
Se un std::thread viene distrutto mentre è ancora joinable, il programma chiama std::terminate. Esegua sempre join() o detach() prima della distruzione.
Wrapper RAII
Scriva un piccolo wrapper RAII che esegua join() nel distruttore. In alternativa, utilizzi std::jthread (C++20), che esegue automaticamente join().
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedConcorrenza hardware
Richieda il numero di thread hardware con std::thread::hardware_concurrency(). Lo utilizzi per dimensionare i pool di thread.
ID dei thread
Ogni thread dispone di un ID univoco. Ottenga l'ID del thread corrente con std::this_thread::get_id().
Sospensione di un thread
Utilizzi std::this_thread::sleep_for(duration) per sospendere temporaneamente il thread corrente.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Verifica rapida
Che cosa accade se un std::thread joinable viene distrutto prima di chiamare join() o detach()?
Riepilogo
Crei thread con std::thread e un oggetto richiamabile. Esegua sempre join() o detach() prima della distruzione dell'oggetto thread, oppure utilizzi std::jthread (C++20), che esegue automaticamente join().
Domande Frequenti
La lezione «std::thread: join e detach» è gratuita?
Sì — il testo completo di «std::thread: join e detach» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «std::thread: join e detach»?
Avvii thread con std::thread e scelga tra join e detach Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «std::thread: join e detach»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- std::thread: join e detach
- std::mutex, lock_guard e unique_lock
- Variabili di condizione e pattern worker
- Basi di std::async e std::future