Concorrenza
Scrivi codice C++ multithread corretto ed efficiente — thread, sincronizzazione, atomiche e algoritmi paralleli.
Thread e sincronizzazione
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.
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.
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
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.
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).
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.