Plan Szkolenia

  1. Wyzwania i problemy współbieżności

    • Ograniczenia sprzętowe platform - wątki sprzętowe, potoki, spójność pamięci cache
    • Elementarne pojęcia związane z programowaniem wielowątkowym (poprawność programu wielowątkowego, żywotność, zagłodzenie, zakleszczenie, wyścig, atomowość, modele spójności, taksonomia Flynn’a)
    • Dostępne w C++ mechanizmy implementowania wielowątkowości i wieloprocesowości
    • Implementacja biblioteki standardowej - elementy od C++14 do dnia dzisiejszego (C++2a)
    • Implementacja dostępna w Boost - różnice w stosunku do biblioteki standardowej
  2. Procesy i wątki

    • Aplikacje wieloprocesowe a wielowątkowe
    • System operacyjny a wątki (krótki przegląd dostępnych implementacji)
    • Mechanizmy synchronizacji procesów i wątków
    • Strukturalna implementacja synchronizacji
    • Specyfika implementacji wielowątkowości w podejściu obiektowym (rola wzorca RAII)
  3. Model pamięci w języku C++

    • Obiekty i miejsca w pamięci
    • Szeregowanie operacji i ich wymuszanie
    • Relacje: synchronizacji, poprzedzania, porządkowania operacji na rzecz działań atomowych, sekwencje zwalniania
    • Bariery pamięci
    • Operacje atomowe
  4. Zarządzanie wątkami w standardzie C++14 i nowszych

    • Klasa std::thread i uruchamianie wątków
    • Identyfikacja wątku
    • Przyłączanie i odłączanie wątku
    • Wątki a kontenery standardowe
    • Obsługa wyjątków w wątkach C++14
  5. Wzajemne wykluczanie i sekcje krytyczne

    • Proste zasady wzajemnego wykluczania
    • Koncepty (rodzaje) dostępnych obiektów blokujących
    • Szybkie wprowadzenie do obsługi czasu w C++14 (biblioteka chrono)
    • Klasy std::mutex, std::timed_mutex, std::shared_mutex i pochodne
    • Wzorzec RAII w obsłudze blokad (std::lock_guard, std::unique_lock)
    • Blokady zależne i odroczone (std::lock)
    • Własność i współwłasność blokad i wątków
    • Problem czytelnicy-pisarze
    • Jednokrotna inicjalizacja
    • Pamięć lokalna (prywatna) wątku (ang. std::thread_local)
  6. Blokady i synchronizacja wątków

    • Operacje na semaforach
    • Blokady rekurencyjne
    • Blokady z definicją poziomu blokowania
    • Zmienne decyzyjne i współpraca z blokadą
    • Implementacja barier aktywnych i pasywnych (ang. Idle Waits, Busy Waits)
    • Wznawianie działania wątków
    • Komunikacja pomiędzy wątkami (model Aktora i CSP)
  7. Zadania asynchroniczne

    • Asynchroniczne zdarzenia i ich obsługa
    • Przyszłości (ang. future)
    • Obietnice (promesy) (ang. promise)
    • Przygotowane zadania (ang. packaged_task)
  8. Typy atomowe

    • Standardowe typy atomowe
    • Uniwersalna flaga atomowa (std::atomic_flag)
    • Szablon klasy std::atomic<T> i jego specjalizacje
    • Funkcje narzędziowe (wolne) typów std::atomic
  9. Specyfika projektowania API wielowątkowego

    • Projektowanie struktur z użyciem blokad - blokady grubo i drobno-ziarniste
    • Wydajność współbieżnego kodu - techniki szacowania i pomiaru
    • Partycjonowanie danych
    • Skalowalność rozwiązań
    • Obsługa błędów i sytuacji wyjątkowych w architekturze aplikacji
  10. Testowanie i debugowanie aplikacji wielowątkowych

    • Przeglądy kodu pod kątem operacji wielowątkowych
    • Specyfika testowania aplikacji wielowątkowych
    • Testy jednostkowe
    • Zwiększanie prawdopodobieństwa sytuacji awaryjnych na rzecz testów
    • Metody formalne testowania aplikacji wielowątkowych
    • Wzorce architektury aplikacji wielowątkowych a testowanie i debugowanie (przegląd)
  11. Zaawansowane zarządzanie wątkami

    • Wątki zależne (wzorzec Sagi)
    • Unikanie współzawodnictwa w dostępie do danych
    • Kontrolowane zatrzymanie i przerwanie wątku
    • Przerwanie wywołań blokujących
    • Obsługa przerwania
    • Wykradanie zadań
    • Przerywanie zadań w trakcie kończenia działania aplikacji
  12. Wzorce projektowe wielowątkowości

    • Rodzaje i przeznaczenie wzorców wielowątkowych
    • Zakres zastosowania wzorców
    • Pula wątków (ang. Thread Pool)
    • Wzorzec aktywnego obiektu (ang. Active Object)
    • Bezpieczna wielowątkowo kolejka (ang. Thread Safe Queue)
    • Wzorzec producenta i konsumenta (ang. Producer Consumer)
    • Wzorzec monitora (ang. Monitor)
    • Bezpieczeństwo wielowątkowe wzorców GoF

Wymagania

  • Umiejętność posługiwania się narzędziami do budowania oprogramowania w C++ w środowisku GNU/Linux i/lub MS Windows
  • Znajomość zagadnień programowania w C++ (paradygmat proceduralny jak i obiektowy) na poziomie zaawansowanym i średnio zaawansowanym
  • Znajomość zagadnień tworzenia kodu uogólnionego (szablony)
  28 godzin

Liczba uczestników


Data rozpoczęcia

Data zakończenia


Daty szkoleń są uzależnione od dostępności trenerów. Szkolenia standardowo odbywają się w godzinach od 09:00 do 16:00.

Cena za uczestnika

Opinie uczestników (3)

Szkolenia Powiązane

Using C++ in Embedded Systems - Applying C++11/C++14

  21 godzin

Powiązane Kategorie