Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Martin Harvey - Threads.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
1.36 Mб
Скачать

Глава 9. Семафоры. Управление потоками данных Взаимосвязь источник-приемник 70

Семафоры 70

Счетчик больше единицы? "Не вполне критические" секции 72

Новое применение семафоров: управление потоками данных 73

Ограниченный буфер 73

Реализация ограниченного буфера в Delphi 76

Создание: Корректная инициализация счетчиков семафоров 79

Работа: правильные времена ожидания 79

Разрушение: Очистка 80

Разрушение: тонкости остаются 80

Доступ к дескрипторам синхронизации должен быть синхронизован! 81

Управление дескрипторами в Win32 82

Решение 85

Использование ограниченного буфера: пример 89

В завершение... 95

Глава 10. Ввод/вывод и потоки данных: от блокировки к асинхронности и обратно 96

Отличия от потока VCL и разработка интерфейса I/O (ввода/вывода) 96

Обзор 97

Реализация компонента преобразования блокировка-асинхронность 98

Добавление к ограниченному буферу операций просмотра 99

Создание двунаправленного ограниченного буфера 103

Детальное рассмотрение Блокировочно-Асинхронного Буфера (БАБ) 105

Создание БАБ 112

Разрушение БАБ 112

Пример программы с использованием БАБ 113

Мы достигли нашей цели! 117

Заметили утечку памяти? 118

Избавляемся от утечки 118

Проблемы просмотра 118

Промежуточный буфер. 119

Различные ограничения 119

Обратная сторона монеты: Потоковые буферы 120

Глава 11. Синхронизаторы и события (Events). 121

Дополнительные механизмы синхронизации. 121

Как добиться оптимальной эффективности. 121

Простой MREWS. 122

Важные моменты реализации 125

Пример использования простого MREWS 126

Основные операции: 129

Введение в события (Events). 134

Моделирование событий с помощью семафоров. 135

Простой MREWS с использованием событий. 137

Глава 12. Еще о возможностях синхронизации в Win32. 139

Повышенная эффективность с помощью операций взаимоблокировки (interlocked) 139

Атомарность ниоткуда 140

Счетчики событий и секвенсоры 142

Реализация взаимного исключения 142

Ограниченный буфер с одним поставщиком данных и одним потребителем 143

Ограниченный буфер с произвольным числом поставщиков и потребителей 143

Другие возможности синхронизации Win32 144

Глава 13. Использование потоков совместно с bde, Исключениями и dll 145

DLL и многопроцессное программирование 145

Поток и пространство процесса. Однопоточная DLL 145

Написание многопоточных DLL 146

Подключение DLL 147

Западня 1: Энкапсуляция функции точки входа в Delphi 148

Написание многопроцессорной DLL 151

Глобально именованные объекты 154

DLL в деталях 154

Инициализация DLL 154

Приложение с использованием DLL 156

Западня 2: Контекст потока в фунциях точки входа 158

Обработка исключений 161

BDE 162

Глава 14. Проблемы, встретившаяся на практике, и их решение 163

Проблема 163

Решение 163

Пайп DLL и интерфейсные файлы 164

Потоки читателя и писателя 180

© Martin Harvey 2000.

Перевод: © Борис Новгородов, Новосибирск, 2002 г. С любезного разрешения Мартина Харви.

Для сайта http://www.vingrad.ru тексты подготовил Сысоев Александр (Петрович)

Работа над этим руководством продолжается. Если у вас есть вопросы или предложения по стилю, существу темы или оформлению исходного материала (на английском), не стесняйтесь писать автору: martin@pergolesi.demon.co.uk. Если у вас есть вопросы или предложения по стилю, существу темы или оформлению русского перевода, не стесняйтесь писать Петрович'у. Последний вариант руководства можно найти на сайте Мартина Харви (Martin Harvey) или в виде HTML страниц, или как zip-файл.

Благодаря большой работе, проделанной Michael Cessna, доступен также вариант в HTML help формате.

Если связь с этим сайтом медленная, архив имеется и на Borland CodeCentral.

Если вы хотите узнать, чем занимается автор в свободное от написания руководств по программированию время, посетите и другие разделы его сайта.

Перевод в pdf формат осуществил Анатолий Подгорецкий http://www.podgoretsky.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]