Шрифт:
Резюме
Разбиение C++ программ на множество потоков
Определение потока
Контекстные требования потока
Сравнение потоков и процессов
Различия между потоками и процессами
Потоки, управляющие другими потоками
Преимущества использования потоков
Переключение контекста при низкой (ограниченной) доступности процессора
Возможности повышения производительности приложения
Простая схема взаимодействия между параллельно выполняющимися потоками
Упрощение структуры программы
Недостатки использования потоков
Потоки могут легко разрушить адресное пространство процесса
Один поток может ликвидировать целую программу
Потоки не могут многократно использоваться другими программами
Анатомия потока
Атрибуты потока
Планирование потоков
Состояния потоков
Планирование потоков и область конкуренции
Стратегия планирования и приоритет
Изменение приоритета потоков
Ресурсы потоков
Модели создания и функционирования потоков
Модель делегирования
Модель с равноправными узлами
Модель конвейера
Модель «изготовитель-потребитель»
Модели SPMD и МРМD для потоков
Введение в библиотеку Pthread
Анатомия простой многопоточной программы
Компиляция и компоновка многопоточных программ
Создание потоков
Получение идентификатора потока
Присоединение потоков
Создание открепленных потоков
Использование объекта атрибутов
Создание открепленных потоков с помощью объекта атрибутов
Управление потоками
Завершение потоков
Точки аннулирования потоков
Очистка перед завершением
Управление стеком потока
Установка атрибутов планирования и свойств потоков
Установка области конкуренции потока
Использование функции sysconf
Управление критическими разделами
Безопасность использования потоков и библиотек
Разбиение программы на несколько потоков
Использование модели делегирования
Использование модели сети с равноправными узлами
Использование модели конвейера
Использование модели «изготовитель-потребитель»
Создание многопоточных объектов
Резюме
Синхронизация параллельно выполняемых задач
Координация порядка выполнения потоков
Взаимоотношения между синхронизируемыми задачами
Отношения типа старт-старт (CC)
Отношения типа финиш-старт (ФС)
Отношения типа старт-финиш (СФ)
Отношения типа финиш-финиш (ФФ)
Синхронизация доступа к данным
Модель РРАМ
Параллельный и исключающий доступ к памяти
Что такое семафоры
Операции по управлению семафором
Мьютексные семафоры
Использование мьютексного атрибутного объекта
Использование мьютексных семафоров для управления критическими разделами
Блокировки для чтения и записи
Использование блокировок чтения-записи для реализации стратегии доступа
Условные переменные
Использование условных переменных для управления отношениями синхронизации
Объектно-ориентированный подход к синхронизации
Резюме
Объединение возможностей параллельного программирования и C++ средств на основе PVM
Классические модели параллелизма, поддерживаемые системой PVM
Библиотека PVM для языка С++
Компиляция и компоновка C++/PVM-npoгpaмм
Выполнение PVM-программы в виде двоичного файла
Запуск PVM-программ c помощью PVM-консоли
Запуск PVM-программ c помощью XPVM
Требования к PVM-программам
Объединение динамической С++-библиотеки c библиотекой PVM
Методы использования PVM-задач
Реализация модели SPMD (SIMD) c помощью PVM-и С++-средств
Реализация модели MPMD (MIMD) с помощью PVM-и С++-средств
Базовые механизмы PVM
Функции управления процессами
Упаковка и отправка сообщений
Доступ к стандартному входному потоку (stdin) и стандартному выходному потоку (stdout) со стороны PVM-задач
Получение доступа к стандартному выходному потоку (cout) из сыновней задачи