Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Plan Szkolenia
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
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)
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
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
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)
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)
Zadania asynchroniczne
- Asynchroniczne zdarzenia i ich obsługa
- Przyszłości (ang. future)
- Obietnice (promesy) (ang. promise)
- Przygotowane zadania (ang. packaged_task)
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
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
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)
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
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
Opinie uczestników (4)
wprowadzenie teoretyczne, przykłady wzorców projektowych, omówienie problemów z wielowątkowością
Piotr - InsERT S.A.
Szkolenie - Programowanie wielowątkowe w języku C++
1) Warsztatowy charakter zajęć :-)
Mariusz Szlagowski - Samsung Electronics Polska Sp. z o.o
Szkolenie - Programowanie wielowątkowe w języku C++
Trener posiada wiedzę i jest żywo zainteresowany wyjaśnianiem najrozmaitszych zagadnień. Pokazał nam fajne narzędzia i zalety korzystania z nowych wersji c++. Dziękuje za nakierowanie na możliwość optymalizacji na etapie linkowania.
Krzysztof Guc
Szkolenie - Programowanie wielowątkowe w języku C++
Smaczki języka c++ oraz przekazywanie ważnych treści, które można nabyć wyłącznie na drodze doświadczenia.