Глава 12 Многопоточная обработка
Глава 12
Многопоточная обработка
12.0. Введение
В данной главе даются рецепты написания многопоточных программ на C++ с использованием библиотеки Boost Threads, автором которой является Вильям Кемпф (William Kempf). Boost — это набор переносимых, высокопроизводительных библиотек с открытым исходным кодом, неоднократно проверенным программистами, и с широким спектром сложности: от простых структур данных до сложного фреймворка синтаксического анализа. Библиотека Boost Threads обеспечивает фреймворк для многопоточной обработки. Дополнительную информацию по проекту Boost можно найти на сайте www.boost.org.
Стандартом C++ не предусматривается встроенная поддержка многопоточной обработки, поэтому нельзя написать переносимый программный код с многопоточной обработкой, подобно тому как создается переносимый код, использующий такие классы стандартной библиотеки, как string, vector, list и т.д. Однако в библиотеке Boost Threads пройден значительный путь к созданию стандартной, переносимой библиотеки многопоточной обработки, и использование этой библиотеки позволяет свести к минимуму головную боль, вызываемую многими обычными проблемами, связанными с многопоточной обработкой.
Все же в отличие от стандартной библиотеки и библиотек независимых разработчиков применение библиотеки многопоточной обработки нельзя свести к распаковке ее архива, включению операторов #include и написанию программного кода, не требующего особых усилий. Во всех приложениях многопоточной обработки (кроме самых простых) необходимо тщательно подойти к разработке проекта, используя проверенные шаблоны и известные тактические приемы, позволяющие избегать ошибок, неизбежно возникающих в противном случае. В типичном однопоточном приложении обычные ошибки программирования находятся легко: циклы с пропуском одного шага, разыменование нулевого или удаленного указателя, потеря точности при преобразованиях чисел с плавающей точкой и т.д. В программах с многопоточной обработкой ситуация другая. Мало того, что задача отслеживания с помощью отладчика действий нескольких потоков становится очень трудоемкой, многопоточные программы работают недетерминировано, т.е. ошибки могут проявляться только в редких или сложных ситуациях.
Именно по этой причине нельзя рассматривать данную главу как введение в многопоточное программирование. Если вы уже имели опыт многопоточного программирования, но не на C++ или без использования библиотеки Boost Threads, эта глава будет полезна для вас. Однако описание основных принципов многопоточного программирования выходит за рамки этой книги. Если до сих пор вы никогда не занимались многопоточным программированием, по-видимому, вам следует прочитать вводный материал по этой тематике, но такой материал трудно найти, потому что большинство программистов не используют потоки выполнения (хотя, возможно, их и следовало бы применить).
Большая часть документации Boost и некоторые приводимые ниже рецепты при обсуждении классов используют понятия концепции и модели. Концепция — это абстрактное описание чего-то, обычно класса и его поведения, причем не делается никаких предположений относительно реализации. Как правило, сюда входит описание действий при конструировании и уничтожении, а также описание каждого метода с указанием предусловий, параметров и постусловий. Например, концепция мьютекса (Mutex) описывается как нечто допускающее блокирование и разблокирование только одним потоком в данный момент времени. Модель — это конкретная реализация концепции, например класс mutex в библиотеке Boost Threads. Уточнение (refinement) концепции — это некая ее специализация, например ReadWriteMutex, т.е. мьютекс с некоторыми дополнительными возможностями.
Наконец, потоки делают что-то одно из трех: работают, находятся в ожидании чего-то или готовы начать работу, но ничего не ожидают и не выполняют никаких действий. Эти состояния носят названия состояний выполнения (run), ожидания (wait) и готовности (ready). Эти термины я использую в последующих рецептах.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
ГЛАВА 4 Обработка исключений
ГЛАВА 4 Обработка исключений Основное внимание в данной главе сфокусировано на структурной обработке исключений (Structured Exception Handling, SEH), но наряду с этим обсуждены также обработчики управляющих сигналов консоли и векторная обработка исключений (Vectored Exception Handling, VEH).SEH
Глава 6 Прерывания и обработка прерываний
Глава 6 Прерывания и обработка прерываний Управление аппаратными устройствами, которые подключены к вычислительной машине, — это одна из самых ответственных функций ядра. Частью этой работы является необходимость взаимодействия с отдельными устройствами машины.
Глава 12 Обработка сигналов
Глава 12 Обработка сигналов Сигналы — это простейшая форма межпроцессного взаимодействия в мире POSIX. Они позволят одному процессу быть прерванным асинхронным образом по инициативе другого процесса (или ядра) для того, чтобы обработать какое-то событие. Обработав сигнал,
Глава 13 Расширенная обработка файлов
Глава 13 Расширенная обработка файлов В Linux файлы применяются при решении большого количества задач, среди которых, например, хранение долговременных данных, организация сетей с помощью сокетов и доступ к устройствам посредством файлов устройств. Разнообразие
Глава 7. Обработка событий
Глава 7. Обработка событий События генерируются оконной системой или Qt в ответ на различные действия. Когда пользователь нажимает или отпускает клавишу или кнопку мышки, генерируется событие клавиши клавиатуры или кнопки мышки; когда окно впервые выводится на экран,
Глава 9 Обработка цифровых фотографий
Глава 9 Обработка цифровых фотографий ? Управление цветопередачей.? Управление освещением.? Управление резкостью.? Устранение артефактов с фотографии.? Устранение эффекта красных глаз.Современным любителям фотографии вряд ли знакомы те проблемы, которые приходилось
Глава 12 Многопоточная обработка
Глава 12 Многопоточная обработка 12.0. Введение В данной главе даются рецепты написания многопоточных программ на C++ с использованием библиотеки Boost Threads, автором которой является Вильям Кемпф (William Kempf). Boost — это набор переносимых, высокопроизводительных библиотек с
ГЛАВА 6. Структурированная обработка исключений
ГЛАВА 6. Структурированная обработка исключений Тема этой главы – устранение аномалий в среде выполнения вашего программного кода C# с помощью структурированной обработки исключений. Вы узнаете о ключевых словах C#, которые позволяют решать такие задачи (это ключевые
Глава 18. Обработка
Глава 18. Обработка Затем OCR-система анализирует (определяет блоки распознавания, выделяет в тексте строки и отдельные символы) изображение и начинает распознавать каждый его символ.Целостное целенаправленное адаптивное распознаваниеРаспознавание печатного материала
ГЛАВА 32. Обработка ошибок и события.
ГЛАВА 32. Обработка ошибок и события. В этой главе мы рассмотрим, как при выполнении модулей PSQL - триггеров и процедур - можно перехватывать и обрабатывать ошибки в выполняемом коде.Стандартным поведением модулей PSQL при появлении исключений является остановка выполнения,
Глава 10 Обработка
Глава 10 Обработка Сделан последний кадр, съемка окончена, под рукой имеется подходящий для работы компьютер со всеми установленными на него необходимыми приложениями, и вы уже готовы к покорению пикселов. Подробному процессу компьютерной обработки фотографий и прочих
Глава 1 Обработка аудиозаписей
Глава 1 Обработка аудиозаписей Программы, предназначенные для обработки аудиозаписей, как правило, имеют сходный пользовательский интерфейс. На экране мы видим волновую форму сигнала в графическом представлении: по вертикали – амплитуда, по горизонтали – время. Изгибы
Глава 8 Аппаратная обработка звука
Глава 8 Аппаратная обработка звука В этой главе мы лишь обозначим проблематику, необходимые сведения по указанной