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

Martin Harvey Многопоточность - как это делается в Дельфи

Multithreading - The Delphi Way. Многопоточность - как это делается в Дельфи.

Martin Harvey.

Version 1.1a

Содержание.

Введение. 6

Посвящения. 7

Рекомендуемая литература 8

Навигация. 9

История изменений 10

Благодарности. 11

Глава 1. Что такое потоки (threads)? Для чего их использовать? 12

Из истории. 12

Определения 12

Пример 13

Разделение времени 13

Для чего используют потоки? 13

Глава 2. Создание потока в Delphi. 15

Предисловие с диаграммой. 15

Наш первый не VCL поток 17

Что именно делает эта программа? 18

Проблемы и сюрпризы. 19

Проблемы запуска. 20

Проблемы взаимодействия 20

Проблемы завершения 20

Глава 3. Основы синхронизации. 23

Как разделять данные между потоками? 23

Атомарность при доступе к общим данным 23

Дополнительные проблемы с VCL 24

Многопроцессорные машины. 25

Решение для Delphi: TThread.Synchronize. 25

Как это работает? Что делает Synchronize? 26

Синхронизация для не-VCL потоков. 27

Глава 4. Простое разрушение потока 29

Проблемы завершения, остановки и разрушения потоков 29

Досрочная остановка потока 29

Событие OnTerminate. 31

Контролируемая остановка потока - Подход 1. 32

Глава 5. Снова о разрушении потока. Тупик или зацикливание (Deadlock) 34

Метод WaitFor 34

Контролируемое завершение потока - Подход 2 34

Введение в обработку сообщений и отложенное уведомление 37

WaitFor может вызвать долгую задержку 39

Вы заметили ошибку? WaitFor и Synchronize: зацикливание 40

Как избежать такого тупика 41

Глава 6. Снова о синхронизации: Критические секции и мьютексы 43

Ограничения Synchronize 43

Критические секции 44

Что это все значит для Delphi-программиста? 46

На заметку 50

Могут ли данные пропасть или остаться недоступными в буфере? 50

Как насчет запоздавших сообщений (out of date)? 50

Проблемы Flow Control и неэффективность списка 51

Мьютексы 52

Глава 7. Программирование с использованием мьютексов. Управление конкуренцией 53

Пора позаботиться о стиле? 53

Тупик из-за упорядочения мьютексов 53

Избавляемся от зацикливания потоков путем ожидания 54

Избавляемся от зацикливания, устанавливая упорядочение захвата мьютексов 54

Из огня да в полымя! 57

Избавляемся от зацикливания "ленивым способом", давая Win32 сделать это за нас 57

Атомарность составных операций - управление конкуренцией оптимистическим и пессимистическим образом 58

Оптимистическое управление 58

Пессимистическое управление 59

Избавляемся от недостатков в схеме блокировки 60

Еще не все ясно? Можно и попроще! 61

Глава 8. Потокобезопасные классы в Дельфи и приоритеты 62

Для чего писать потокобезопасные классы? 62

Типы потокобезопасных классов. 62

Потокобезопасная инкапсуляция или наследники существующих классов 62

Классы управления потоками данных 63

Мониторы 63

Классы Interlock (взаимоблокировки) 64

Поддержка потоков в VCL 64

TThreadList 64

TSychroObject 64

TEvent и TSimpleEvent 65

TMultiReadExclusiveWriteSynchroniser 65

Руководство разработчика потокобезопасных классов 66

Управление приоритетами 66

Что такое приоритет? Как это делается в Win32 67

Какой приоритет дать моему потоку? 68

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