Zakres szkolenia
W trakcie szkolenia omawiane są zagadnienia dotyczące programowanie współbieżnego w języku C++11. Uczestnicy szkolenia zapoznają się z metodami tworzenia, łączenia oraz kończenia wątków. Szczegółowo prezentowane są również sposoby synchronizacji wątków przy dostępie do zasobów współdzielonych (muteksy, zmienne warunkowe, zmienne atomowe itp.).
Uczestnicy szkolenia uczą się również tworzenia bezpiecznych wielowątkowo struktur danych (thread-safe queue) oraz implementacji wzorców 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::timedmutex, std::sharedmutex
- Wersje rekursywne muteksów
- Zarządzanie blokadami - klasy std::lockguard<Mutex> oraz std::uniquelock<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
Opanowane tematy ze szkoleń:
3 dni po 8 godzin lekcyjnych