Programowanie wielowątkowe w języku C++

Cele szkolenia

Uczestnicy szkolenia nauczą się:

  • tworzyć, łączyć oraz kończyć wątki
  • synchronizować dostęp do współdzielonych zasobów (muteksy, zmienne warunkowe, zmienne atomowe, itp.)
  • wyłapywać i unikać błędów, takich jak race condition, deadlock, itp.
  • tworzyć bezpieczne wielowątkowo struktury danych (thread-safe queue) i wykorzystać je do implementacji wzorca Producer-Consumer
  • implementować wzorce projektowe Thread Pool i Active Object

Plan szkolenia

Wprowadzenie do programowanie współbieżnego

  • Procesy oraz wątki
  • Podstawowe pojęcia: poprawność programu, wyścig, wzajemne wykluczenie, żywotność, zagłodzenie wątków, zakleszczenie

Zarządzanie wątkami

  • Klasa std::thread
  • Tworzenie i uruchamianie zadań w osobnych wątkach
  • Łączenie i odłączanie wątków - implementacja RAII dla wątków
  • Grupowanie wątków - przechowywanie wątków w kontenerach standardowych
  • Wątki sprzętowe
  • Bezpieczna obsługa wyjątków w wątkach - std::exception_ptr

Synchronizacja wątków - muteksy

  • Koncepty obiektów blokowalnych
  • Muteksy w bibliotece standardowej
    • Klasy std::mutex, std::timed_mutex, std::shared_mutex
    • Wersje rekursywne muteksów
  • Zarządzanie blokadami - klasy std::lock_guard<Mutex> oraz std::unique_lock<Mutex>
  • Synchronizacja dostępu do obiektów za pomocą muteksów - wzorzec Monitor
  • Unikanie zakleszczeń - funkcja std::lock()
  • Blokady współdzielone - implementacja problemów typu readers-writers

Synchronizacja zdarzeń między wątkami

  • Busy waits - flagi atomowe
  • Idle waits - blokady warunkowe
  • Mechanizmy komunikacji między wątkami
    • Busy waits - zmienne atomowe
    • Idle waits - zmienne warunkowe - klasa std::condition_variable
  • Implementacja klasy ThreadSafeQueue oraz wzorca Producer-Consumer

Leniwa inicjalizacja obiektów

  • Jednokrotna inicjalizacja - implementacja thread-safe wzorców Singleton oraz Virtual Proxy

Wstęp do typów atomowych

  • Klasa std::atomic<T>
  • Semantyka Acquire-Release operacji synchronizujących
  • Model pamięci w C++11
  • Algorytmy i struktury danych lock-free - wstęp

Funkcje wywoływane asynchronicznie

  • Wywołania asynchroniczne funkcji z wykorzystaniem biblioteki standardowej - std::async()
  • Uruchamianie zadań asynchronicznych - klasa std::packaged_task
  • Odczytywanie wyników zwracanych przez funkcje asynchroniczne - obiekty typu future
  • Mechanizm komunikacji między wątkami za pomocą klasy std::promise

Podstawowe wzorce programowania współbieżnego

  • Thread Pool
  • Active Object

Wymagania

Opanowane tematy ze szkolenia Programowanie w języku C++.

Czas trwania

3 dni po 8 godzin lekcyjnych
Wycena szkolenia zamkniętego

Szkolenie zamknięte w siedzibie Klienta.

Klient zapewnia salę szkoleniową i sprzęt.

Zapytaj o termin i cenę
Wycena szkolenia zdalnego

Szkolenie live online. Warsztaty z trenerem.

Zapytaj o termin i cenę
Terminy szkoleń otwartych
Zdalne
3-5.4.2023
2990 PLN Zgłoś udział

Pasuje Ci inny termin?

Wyślij zapytanie