Оглавление
Предисловие
Глава 1. Введение
Параллелизм
Семейства API
Native QNX API
POSIX (BSD) API
System V API
Глава 2. Процессы и потоки
Процессы
Создание нового процесса
Использование командного интерпретатора
Клонирование процесса
Запуск нового программного кода
Завершение процесса
Соображения производительности
Потоки
Создание нового потока
Атрибуты потока
Присоединенность
Дисциплина диспетчеризации
Приоритет
Отличия от POSIX
Передача параметров потоку
Данные потока
Собственные данные потока
Безопасность вызовов в потоковой среде
Диспетчеризация потоков
Спорадическая диспетчеризация
Соображения производительности
Завершение потока
Возврат результата потока
Уничтожение (отмена) потока
Стек процедур завершения
"Легковесность" потока
Пример: синхронное выполнение потока
Глава 3. Сигналы
Традиционная обработка сигнала
"Старая" модель обработки сигнала
Модель надежных сигналов
Модель сигналов реального времени
Соображения производительности
Сигналы в потоках
За пределы POSIX: сигналы в сети
Глава 4. Примитивы синхронизации
Семафор (счетный)
Операции над семафорами
Создание семафора
Операции блокировки
Операции освобождения
Получение статуса семафора
Использование семафора
Мьютекс
Параметры мьютекса
Инициализация параметров
Установка граничного приоритета
Определение протокола защиты от инверсии приоритетов
Внешний доступ
Разрешение рекурсивного захвата
Определение типа мьютекса
Освобождение параметров
Операции над мьютексом
Инициализация мьютекса
Операции с граничным приоритетом
Захват мьютекса
Освобождение мьютекса
Разрушение объекта мьютекс
Операции, не поддерживаемые POSIX
Пример применения мьютекса
Сравнение и эффективность
Атомарные операции
Условная переменная
Операции над условной переменной
Параметры условной переменной
Разрушение блока параметров
Инициализация условной переменной
Ожидание условия
Выполнение условия
Разрушение условной переменной
Ждущая блокировка
Операции со ждущей блокировкой
Захват и освобождение ждущей блокировки
Функции ожидания
Ожидание завершения потока
Барьер
Операции с барьерами
Параметры барьера
Инициализация и разрушение барьера
Ожидание на барьере
Блокировки чтения/записи
Операции с блокировками чтения/записи
Инициализация объекта блокировки
Захват блокировки чтения/записи
Освобождение блокировки
Использование блокировок чтения/записи
Спинлок
Операции со спинлоком
Инициализация и разрушение спинлока
Захват и освобождение спинлока
Глава 5. Специфические механизмы QNX
Обмен сообщениями микроядра
Динамический пул потоков
Менеджеры ресурсов
Многопоточный менеджер
Множественные каналы
Сообщения или менеджер?
Две стороны единого механизма
Простота и трудоемкость
Гибкость и мобильность
Эффективность реализации
Что же в итоге?
Приложение. Организация обмена сообщениями (В. Зайцев)
Организация обмена сообщениями на основе "семейных" процессов
Пример кода родительского процесса
Пример кода порожденного процесса
Обмен сообщениями на основе менеджера ресурсов
Пример обмена сообщениями с помощью менеджера ресурсов
Код файла заголовков
Код процесса-клиента
Код процесса-сервера (менеджера ресурсов)
Использование менеджера службы глобальных имен
Код процесса-сервера, использующего службу глобальных имен
Код процесса-клиента, использующего службу глобальных имен
Заключение
Литература
Алфавитный указатель