Программирование на C++, часть 2
Новосибирск, весна 2021
Описание
Продолжение курса «Программирование на С++, часть 1»
Примерное содержание второго семестра
- многопоточность от азов до сложных конструкций
- move-семантика
- compile-time вычисления
- продвинутое использование шаблонов
- undefined behavior
- популярные библиотеки и инструменты
- свежие фичи стандарта
Репозиторий курса (материалы, литература, ссылки)
Критерии оценки
Оценка | Баллы |
---|---|
зачёт | 7 |
хорошо | 14 |
отлично | 21 |
Максимум баллов за курс: 24
Домашние задания
В семестре предполагается 3 домашних задания стоимостью:
- Задание 1 - до 10 баллов
- Задание 2 - до 8 баллов
- Задание 3 - до 6 баллов
Схема принятия задания:
- первые 2 недели для посылки готового работающего решения
- вторые 2 недели для прохождения ревью
Инструкция по оформлению домашнего задания аналогична первой части курса
Преподаватели
Список лекций
Многопоточность. Введение
- Процессы и потоки. Обзор.
std::thread
- Эффективность распараллеливания. Закон Амдала.
std::promise
+std::future
std::async
Многопоточность. Продолжение.
- race condition
std::mutex
+std::lock_guard
- объекты с доступом из нескольких потоков
- deadlock
std::scoped_lock
std::recursive_mutex
,std::shared_mutex
std::condition_variable
- Thread Local Storage
Многопоточность. Продвинутый материал.
- основы
std::atomic
std::atomic
vsstd::mutex
- Compile time && run time instructions reordering
- Double Checked Locking Pattern
- Spin Lock
- Гибридные примитивы синхронизации
Многопоточность. Основы lock free
- Определение lock free
- Hardware memory model (really weak / weak with data dependency / strong / sequential consistent)
- C++ memory model
- Lock free stack:
- ABA - проблема
- Hazard Pointers
move-семантика
- Категория выражения до и после С++11
- Поддержка move-операций классами
std::move
- Правила передачи параметра в функцию (С++11 и далее)
- Perfect forwarding && universal references
Шаблоны. Продвинутый материал
- SFINAE
std::enable_if
- variadic templates
- fold expression
- tag dispatching
- deduction guides
Мелкие нововведения стандарта
auto
- user-defined literals
- static assertions
- атрибуты
std::string_view
,std::span
std::optional
- гетерогенный поиск по контейнерам
- slicing в ассоциативных контейнерах
- structured bindings
Undefined behavior
- ill-formed / well-formed
- Определение undefined behavior
- UB на примерах
Compile time вычисления
- Эволюция
constexpr
по различным версиям стандарта constexpr
и UBconsteval
иconstinit
стоимость compile-time вычислений