Программирование на 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::futurestd::async
Многопоточность. Продолжение.
- race condition
std::mutex+std::lock_guard- объекты с доступом из нескольких потоков
- deadlock
std::scoped_lockstd::recursive_mutex,std::shared_mutexstd::condition_variable- Thread Local Storage
Многопоточность. Продвинутый материал.
- основы
std::atomic std::atomicvsstd::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::spanstd::optional- гетерогенный поиск по контейнерам
- slicing в ассоциативных контейнерах
- structured bindings
Undefined behavior
- ill-formed / well-formed
- Определение undefined behavior
- UB на примерах
Compile time вычисления
- Эволюция
constexprпо различным версиям стандарта constexprи UBconstevalиconstinitстоимость compile-time вычислений


