Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Потоки и дескрипторы

Введение | Реализация параллельного потока | Менеджер потоков | Взаимодействие с VCL-потоком | Разделяемые данные | Асинхронное взаимодействие | Синхронное взаимодействие |


Читайте также:
  1. Вертикальные потоки
  2. Восходящие потоки
  3. ВОСХОДЯЩИЕ ПОТОКИ
  4. Грузооборот и грузопотоки. Понятие и определение.
  5. Денежные потоки организации по инвестиционной и финансовой деятельности.
  6. Денежные потоки предприятия как экономическая категория. Основные классификации денежных потоков.
  7. Повышающиеся и снижающиеся потоки доходов

Когда мы создаем какой-либо объект ядра Windows: файл, сокет, окно, мьютекс, то всегда получаем как результат не сам объект (не его адрес в памяти), а некоторое целое число, дескриптор (handle), которое однозначно характеризует системный ресурс. С одной стороны, дескриптор развязывает виртуальную память приложения и виртуальную память ядра операционной системы, а с другой стороны, выполняет функцию автоматического контроля существования объекта, так как любое обращение к объекту происходит через его дескриптор. Эту же технику мы можем применить в нашем случае для решения задачи корректного уничтожения потоков. Определим в первом приближении интерфейс объекта-арбитра, который будет разрешать все конфликты, связанные с созданием потоков, их уничтожением и получением доступа к потокам:

TMyThreadManager = classpublic function Add(aThread: TMyThread): Integer; procedure Release(aHandle: Integer); function Lock(aHandle: Integer): TMyThread;end;

Предполагается, что все потоки порождаются от некоторого базового класса TMyThread. После конструирования объекта потока он передается арбитру-менеджеру, который сохраняет его в своих недрах и возвращает целочисленный дескриптор, однозначно характеризующий поток. Приложение (или другой поток-родитель) сохраняет у себя дескриптор созданного потока. Когда поток больше не нужен, то его можно уничтожить, вызывав операцию Release и передав ей дескриптор потока. Если поток уже был уничтожен, то ничего не произойдет, а если поток еще жив, то будет сделана попытка его уничтожения. Здесь важен акцент на слове "попытка", а не на слове "уничтожение", но об этом чуть позже. Когда поток приложения (или любой другой поток) желает взаимодействовать с потоком, дескриптор которого ему известен, он может блокировать поток в памяти, вызвав метод Lock, который возвращает действительный объект потока или nil, если потока больше не существует. Когда поток завершается самостоятельно или другим объектом, которому он больше не нужен, то это делается с помощью уже известного нам метода Release.


Дата добавления: 2015-07-20; просмотров: 130 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Синхронизация потоков| Подсчет ссылок

mybiblioteka.su - 2015-2024 год. (0.005 сек.)