0Pricing
C++ Academy · Leçon

std::thread : jonction et détachement

Lancer des threads avec std::thread et choisir entre join et detach

std::thread : jonction et détachement est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

La classe std::thread

L'en-tête <thread> a introduit la gestion des threads dans la bibliothèque standard en C++11. Chaque instance de std::thread représente un thread du système d'exploitation.

Créer un thread

Passez un objet appelable (fonction, lambda ou foncteur) au constructeur. Le thread commence à s'exécuter immédiatement.

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

Passer des arguments

Transmettez les arguments à l'objet appelable par l'intermédiaire du constructeur.

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

Passage par référence

Utilisez std::ref pour passer les arguments par référence. Sans cela, le thread reçoit des copies.

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

join(): attendre la fin

Appelez join() pour bloquer le thread appelant jusqu'à la fin du thread cible. Après join, le thread ne peut plus être rejoint.

detach(): exécution indépendante

Appelez detach() pour exécuter le thread indépendamment. Il continue de s'exécuter après la destruction de std::thread. Le système d'exploitation libère les ressources lorsque le thread se termine.

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

joinable()

Vérifiez si le thread peut être rejoint ou détaché. Un thread qui a été rejoint ou détaché ne peut plus être rejoint.

Oublier join : terminaison

Si un std::thread est détruit alors qu'il peut encore être rejoint, le programme appelle std::terminate. Effectuez toujours un join ou un detach avant la destruction.

Wrapper RAII

Écrivez un petit wrapper RAII qui effectue un join dans le destructeur. Vous pouvez aussi utiliser std::jthread (C++20), qui effectue automatiquement le join.

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

Concurrence matérielle

Interrogez le nombre de threads matériels avec std::thread::hardware_concurrency(). Utilisez cette valeur pour dimensionner les pools de threads.

Identifiants de threads

Chaque thread possède un identifiant unique. Obtenez l'identifiant du thread courant avec std::this_thread::get_id().

Mettre un thread en veille

Utilisez std::this_thread::sleep_for(duration) pour mettre le thread courant en pause.

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

Vérification rapide

Que se passe-t-il si un std::thread qui peut encore être rejoint est détruit avant l'appel de join() ou detach() ?

Récapitulatif

Créez des threads avec std::thread et un objet appelable. Effectuez toujours un join() ou un detach() avant la destruction de l'objet thread — ou utilisez std::jthread (C++20), qui effectue automatiquement le join.

Questions Fréquemment Posées

La leçon « std::thread : jonction et détachement » est-elle gratuite ?

Oui — le texte complet de « std::thread : jonction et détachement » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « std::thread : jonction et détachement » ?

Lancer des threads avec std::thread et choisir entre join et detach Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « std::thread : jonction et détachement » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. std::thread : jonction et détachement
  2. std::mutex, lock_guard et unique_lock
  3. Variables de condition et schémas de travailleurs
  4. Bases de std::async et std::future
← Retour à C++ Academy