Aller au contenu
Module 7

Concurrence

Écrivez du C++ multithread correct et efficace — threads, synchronisation, opérations atomiques et algorithmes parallèles.

Threads et synchronisation

  1. std::thread, std::jthread et gestion des threads

    Apprenez à créer et à gérer des threads avec std::thread et std::jthread de C++20. Comprenez la différence entre join et detach, l'annulation coopérative avec les stop tokens, le stockage local au thread et la gestion des exceptions entre threads.

  2. Mutex, verrous et sections critiques

    Maîtrisez les primitives de synchronisation : mutex, lock_guard, unique_lock, scoped_lock, shared_mutex. Apprenez à protéger les données partagées, à éviter les interblocages et à distinguer data race et condition de concurrence.

  3. Variables de condition et producteur-consommateur

    Utilisez les variables de condition pour coordonner efficacement les threads. Construisez une file producteur-consommateur thread-safe, gérez les réveils intempestifs et évitez le problème du réveil perdu.

Async, atomiques et parallélisme

  1. std::async, std::future et std::promise

    Utilisez des abstractions de concurrence de plus haut niveau : lancez des tâches asynchrones avec std::async, récupérez les résultats avec std::future, et définissez manuellement des valeurs ou des exceptions avec std::promise.

  2. Opérations atomiques et ordonnancement mémoire

    Comprenez la programmation sans verrou (lock-free) avec std::atomic. Maîtrisez les ordres mémoire (relaxed, acquire, release, seq_cst), implémentez un spinlock avec atomic_flag et découvrez le schéma compare-and-swap (CAS).

  3. Algorithmes parallèles et politiques d'exécution

    Tirez parti de la STL parallèle de C++17 pour paralléliser le tri, la transformation et la réduction grâce aux politiques d'exécution. Comprenez quand le parallélisme est utile, la loi d'Amdahl et la conception pratique d'un pool de threads.