Vai al contenuto
Modulo 7

Concorrenza

Scrivi codice C++ multithread corretto ed efficiente — thread, sincronizzazione, atomiche e algoritmi paralleli.

Thread e sincronizzazione

  1. std::thread, std::jthread e gestione dei thread

    Impara a creare e gestire i thread con std::thread e con std::jthread del C++20. Comprendi la differenza tra join e detach, la cancellazione cooperativa con gli stop token, la memorizzazione thread-local e la gestione delle eccezioni attraverso i confini tra thread.

  2. Mutex, lock e sezioni critiche

    Padroneggia le primitive di sincronizzazione: mutex, lock_guard, unique_lock, scoped_lock, shared_mutex. Impara a proteggere i dati condivisi, a prevenire i deadlock e a capire la differenza tra data race e race condition.

  3. Variabili di condizione e produttore-consumatore

    Usa le variabili di condizione per coordinare i thread in modo efficiente. Costruisci una coda produttore-consumatore thread-safe, gestisci i risvegli spuri ed evita il problema del risveglio perso.

Async, atomiche e parallelismo

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

    Usa astrazioni di concorrenza di più alto livello: avvia task asincroni con std::async, recupera i risultati con std::future e imposta manualmente valori o eccezioni con std::promise.

  2. Operazioni atomiche e ordinamento della memoria

    Comprendi la programmazione lock-free con std::atomic. Padroneggia gli ordinamenti della memoria (relaxed, acquire, release, seq_cst), implementa uno spinlock con atomic_flag e impara il pattern compare-and-swap (CAS).

  3. Algoritmi paralleli e policy di esecuzione

    Sfrutta la STL parallela del C++17 per parallelizzare ordinamento, trasformazione e riduzione con le policy di esecuzione. Comprendi quando il parallelismo conviene, la legge di Amdahl e la progettazione pratica di un thread pool.