0Pricing
C++ Academy · Lezione

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

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

joinable()

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 destroyed

Concorrenza 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

  1. std::thread: join e detach
  2. std::mutex, lock_guard e unique_lock
  3. Variabili di condizione e pattern worker
  4. Basi di std::async e std::future
← Torna a C++ Academy