С++. Практика многопоточного программирования
Book information
Description
Предисловие Благодарности О книге Структура издания Для кого предназначена эта книга Порядок чтения Условные обозначения и загрузка кода Требования к программным средствам Форум, посвященный книге Об авторе Об иллюстрации на обложке От издательства Глава 1. Здравствуй, мир конкурентности в C++! 1.1. Что такое конкурентность 1.1.1. Конкурентность в компьютерных системах 1.1.2. Подходы к конкурентности 1.1.3. Сравнение конкурентности и параллелизма 1.2. Зачем используется конкурентность 1.2.1. Конкурентность для разделения неотложных задач 1.2.2. Конкурентность для повышения производительности: параллелизм задач и данных 1.2.3. Когда не нужна конкурентность 1.3. Конкурентность и многопоточность в C++ 1.3.1. История поддержки многопоточности в C++ 1.3.2. Поддержка конкурентности в стандарте C++11 1.3.3. Расширение поддержки конкурентности и параллелизма в C++14 и C++17 1.3.4. Эффективность, обеспеченная библиотекой потоков C++ 1.3.5. Средства, ориентированные на использование конкретной платформы 1.4. Приступаем к практической работе 1.4.1. Здравствуй, мир конкурентности Резюме Глава 2. Управление потоками 2.1. Основы управления потоками 2.1.1. Запуск потока 2.1.2. Ожидание завершения потока 2.1.3. Ожидание в исключительных обстоятельствах 2.1.4. Запуск потоков в фоновом режиме 2.2. Передача аргументов функции потока 2.3. Передача права владения потоком 2.4. Выбор количества потоков в ходе выполнения программы 2.5. Идентификация потоков Резюме Глава 3. Совместное использование данных несколькими потоками 3.1. Проблемы совместного использования данных несколькими потоками 3.1.1. Состояние гонки 3.1.2. Пути обхода проблемных состояний гонок 3.2. Защита совместно используемых данных с применением мьютексов 3.2.1. Использование мьютексов в C++ 3.2.2. Структуризация кода для защиты совместно используемых данных 3.2.3. Обнаружение состояния гонки, присущего интерфейсам 3.2.4. Взаимная блокировка: проблема и решение 3.2.5. Дополнительные рекомендации по обходу взаимных блокировок 3.2.6. Гибкая блокировка с применением std::unique_lock 3.2.7. Передача владения мьютексом между областями видимости 3.2.8. Блокировка с соответствующей степенью детализации 3.3. Альтернативные средства защиты совместно используемых данных 3.3.1. Защита совместно используемых данных во время инициализации 3.3.2. Защита редко обновляемых структур данных 3.3.3. Рекурсивная блокировка Резюме Глава 4. Синхронизация конкурентных операций 4.1. Ожидание наступления события или создания другого условия 4.1.1. Ожидание выполнения условий с применением условных переменных 4.1.2. Создание потокобезопасной очереди с условными переменными 4.2. Ожидание единичных событий с помощью фьючерсов 4.2.1. Возвращение значений из фоновых задач 4.2.2. Связывание задачи с фьючерсом 4.2.3. Создание промисов std::promise 4.2.4. Сохранение исключения на будущее 4.2.5. Ожидание сразу в нескольких потоках 4.3. Ожидание с ограничением по времени 4.3.1. Часы 4.3.2. Продолжительность 4.3.3. Моменты времени 4.3.4. Функции, принимающие сроки ожидания 4.4. Применение синхронизации операций для упрощения кода 4.4.1. Функциональное программирование с применением фьючерсов 4.4.2. Синхронизация операций путем передачи сообщений 4.4.3. Конкурентность, организованная в стиле продолжений с применением Concurrency TS 4.4.4. Выстраиваем продолжения в цепочку 4.4.5. Ожидание готовности более чем одного фьючерса 4.4.6. Ожидание первого фьючерса в наборе с when_any 4.4.7. Защелки и барьеры в Concurrency TS 4.4.8. Базовый тип защелки std::experimental::latch 4.4.9. Основной барьер std::experimental::barrier 4.4.10. Барьер std::experimental::flex_barrier — более гибкий соратник барьера std::experimental::barrier Резюме Глава 5. Модель памяти C++ и операции над атомарными типами 5.1. Основы модели памяти 5.1.1. Объекты и их размещение в памяти 5.1.2. Объекты, области памяти и конкурентность 5.1.3. Очередность внесения изменений 5.2. Атомарные операции и типы в C++ 5.2.1. Стандартные атомарные типы 5.2.2. Операции над std::atomic_flag 5.2.3. Операции над std::atomic 5.2.4. Операции над std::atomic: арифметика указателей 5.2.5. Операции над стандартными атомарными целочисленными типами 5.2.6. Шаблон первичного класса std::atomic 5.2.7. Свободные функции для атомарных операций 5.3. Синхронизация операций и принудительное упорядочение 5.3.1. Отношение «синхронизируется с» 5.3.2. Отношение «происходит до» 5.3.3. Упорядочение доступа к памяти для атомарных операций 5.3.4. Последовательности освобождений и отношения «синхронизируется с» 5.3.5. Барьеры 5.3.6. Упорядочение неатомарных операций с помощью атомарных операций 5.3.7. Упорядочение неатомарных операций Резюме Глава 6. Разработка конкурентных структур данных с блокировками 6.1. Что означает разработка структур для конкурентного доступа 6.1.1. Рекомендации по разработке структур данных для конкурентного доступа 6.2. Конкурентные структуры данных с блокировками 6.2.1. Потокобезопасный стек, использующий блокировки 6.2.2. Потокобезопасная очередь с использованием блокировок и условных переменных 6.2.3. Потокобезопасная очередь с использованием подробной детализации блокировок и условных переменных 6.3. Разработка более сложных структур данных с использованием блокировок 6.3.1. Создание потокобезопасной поисковой таблицы с использованием блокировок 6.3.2. Создание потокобезопасного списка с использованием блокировок Резюме Глава 7. Разработка конкурентных структур данных без блокировок 7.1. Определения и выводы 7.1.1. Типы структур данных, не подвергаемых блокировкам 7.1.2. Структуры данных, свободные от блокировок 7.1.3. Структуры данных, свободные от ожиданий 7.1.4. Все за и против создания структур данных, свободных от блокировок 7.2. Примеры структур данных, свободных от блокировок 7.2.1. Создание потокобезопасного стека без блокировок 7.2.2. Устранение досадных утечек: управление памятью в структурах данных, свободных от блокировок 7.2.3. Определение узлов, не подлежащих утилизации, с помощью указателей опасности 7.2.4. Определение используемых узлов путем подсчета ссылок 7.2.5. Применение модели памяти к свободному от блокировок стеку 7.2.6. Создание потокобезопасной очереди без блокировок 7.3. Рекомендации по созданию структур данных без блокировок 7.3.1. Для создания прототипа используйте std::memory_order_seq_cst 7.3.2. Воспользуйтесь схемой утилизации памяти, свободной от блокировок 7.3.3. Остерегайтесь проблемы ABA 7.3.4. Выявляйте циклы активного ожидания и организуйте помощь другому потоку Резюме Глава 8. Разработка конкурентного кода 8.1. Способы распределения работы между потоками 8.1.1 Распределение данных между потоками на начало обработки 8.1.2. Рекурсивное распределение данных 8.1.3. Распределение работы по типам задач 8.2. Факторы, влияющие на производительность конкурентного кода 8.2.1. А сколько у нас процессоров? 8.2.2. Конкуренция при обращении к данным и пинг-понг данными в кэш-памяти процессоров 8.2.3. Ложное совместное использование памяти 8.2.4. Насколько близко расположены по отношению друг к другу ваши данные? 8.2.5. Переоценка вычислительных возможностей и чрезмерное количество переключений задач 8.3. Разработка структур данных для высокопроизводительных многопоточных приложений 8.3.1. Распределение элементов массива для сложных операций 8.3.2. Схемы доступа к данным в других структурах данных 8.4. Дополнительные факторы, учитываемые при разработке конкурентных программ 8.4.1. Безопасность исключений в параллельных алгоритмах 8.4.2. Масштабируемость и закон Амдала 8.4.3. Компенсация потерь на ожидание за счет применения нескольких потоков 8.4.4. Повышение отзывчивости за счет конкурентности 8.5. Разработка конкурентного кода на практике 8.5.1. Параллельная реализация std::for_each 8.5.2. Параллельная реализация std::find 8.5.3. Параллельная реализация std::partial_sum Резюме Глава 9. Усовершенствованное управление потоками 9.1. Пулы потоков 9.1.1. Простейший пул потоков 9.1.2. Ожидание завершения задач, переданных пулу потоков 9.1.3. Задачи, ожидающие завершения других задач 9.1.4. Предотвращение конкуренции при обращении к очереди работ 9.1.5. Хищение работы 9.2. Прерывание потоков 9.2.1. Запуск и прерывание другого потока 9.2.2. Обнаружение того, что поток был прерван 9.2.3. Прерывание ожидания на условной переменной 9.2.4. Прерывание ожидания на std::condition_variable_any 9.2.5. Прерывание других блокирующих вызовов 9.2.6. Обработка прерываний 9.2.7. Прерывание фоновых задач при выходе из приложения Резюме Глава 10. Алгоритмы параллельных вычислений 10.1. Перевод стандартных библиотечных алгоритмов в режим параллельных вычислений 10.2. Политики выполнения 10.2.1. Общие последствия от задания политики выполнения 10.2.2. std::execution::sequenced_policy 10.2.3. std::execution::parallel_policy 10.2.4. std::execution::parallel_unsequenced_policy 10.3. Параллельные алгоритмы из стандартной библиотеки C++ 10.3.1. Примеры использования параллельных алгоритмов 10.3.2. Подсчет посещений Резюме Глава 11. Тестирование и отладка многопоточных приложений 11.1. Типы ошибок, связанных с конкурентностью 11.1.1. Нежелательная блокировка 11.1.2. Состояния гонки 11.2. Приемы обнаружения ошибок, связанных с конкурентностью 11.2.1. Просмотр кода с целью поиска возможных ошибок 11.2.2. Обнаружение ошибок, связанных с конкурентностью, путем тестирования 11.2.3. Разработка кода с прицелом на удобство тестирования 11.2.4. Приемы многопоточного тестирования 11.2.5. Структурирование многопоточного тестового кода 11.2.6. Тестирование производительности многопоточного кода Резюме Приложение А. Краткий справочник по некоторым функциям языка C++11 A.1. Ссылки на r-значения A.1.1. Семантика перемещений A.1.2. Ссылки на r-значения и шаблоны функций A.2. Удаленные функции A.3. Функции по умолчанию A.4. constexpr-функции A.4.1. constexpr и типы, определенные пользователем A.4.2. constexpr-объекты A.4.3. Требования к constexpr-функциям A.4.4. constexpr и шаблоны A.5. Лямбда-функции A.5.1. Лямбда-функции, ссылающиеся на локальные переменные A.6. Вариативные шаблоны A.6.1. Расширение пакета параметров A.7. Автоматическое выведение типа переменной A.8. Локальные переменные потока A.9. Выведение аргументов шаблона класса Резюме Приложение Б. Краткое сравнение библиотек для написания конкурентных программ Приложение В. Среда передачи сообщений и полный пример программы управления банкоматом Приложение Г. Справочник по C++ Thread Library Г.1. Заголовок Г.1.1. Шаблон класса std::chrono::duration Г.1.2. Шаблон класса std::chrono::time_point Г.1.3. Класс std::chrono::system_clock Г.1.4. Класс std::chrono::steady_clock Г.1.5. Псевдоним типа std::chrono::high_resolution_clock Г.2. Заголовок Г.2.1. Класс std::condition_variable Г.2.2. Класс std::condition_variable_any Г.3. Заголовок Г.3.1. Псевдонимы типа std::atomic_xxx Г.3.2. Макросы ATOMIC_xxx_LOCK_FREE Г.3.3. Макрос ATOMIC_VAR_INIT Г.3.4. Перечисление std::memory_order Г.3.5. Функция std::atomic_thread_fence Г.3.6. Функция std::atomic_signal_fence Г.3.7. Класс std::atomic_flag Г.3.8. Шаблон класса std::atomic Г.3.9. Специализации шаблона std::atomic Г.3.10. Специализации std::atomic Г.4. Заголовок Г.4.1. Шаблон класса std::future Г.4.2. Шаблон класса std::shared_future Г.4.3. Шаблон класса std::packaged_task Г.4.4. Шаблон класса std::promise Г.4.5. Шаблон функции std::async Г.5. Заголовок Г.5.1. Класс std::mutex Г.5.2. Класс std::recursive_mutex Г.5.3. Класс std::timed_mutex Г.5.4. Класс std::recursive_timed_mutex Г.5.5. Класс std::shared_mutex Г.5.6. Класс std::shared_timed_mutex Г.5.7. Шаблон класса std::lock_guard Г.5.8. Шаблон класса std::scoped_lock Г.5.9. Шаблон класса std::unique_lock Г.5.10. Шаблон класса std::shared_lock Г.5.11. Шаблон функции std::lock Г.5.12. Шаблон функции std::try_lock Г.5.13. Класс std::once_flag Г.5.14. Шаблон функции std::call_once Г.6. Заголовок Г.6.1. Шаблон класса std::ratio Г.6.2. Псевдоним шаблона std::ratio_add Г.6.3. Псевдоним шаблона std::ratio_subtract Г.6.4. Псевдоним шаблона std::ratio_multiply Г.6.5. Псевдоним шаблона std::ratio_divide Г.6.6. Шаблон класса std::ratio_equal Г.6.7. Шаблон класса std::ratio_not_equal Г.6.8. Шаблон класса std::ratio_less Г.6.9. Шаблон класса std::ratio_greater Г.6.10. Шаблон класса std::ratio_less_equal Г.6.11. Шаблон класса std::ratio_greater_equal Г.7. Заголовок Г.7.1. Класс std::thread Г.7.2. Пространство имен this_thread
Similar books
С++. Практика многопоточного программирования
2020 · DJVU
Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique
2025 · PDF
Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная
2022 · PDF
Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание
2021 · PDF
Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)
2022 · PDF
Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)
2023 · PDF
Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"
2022 · PDF
Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»
2014 · PDF