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

Подсчет ссылок

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


Читайте также:
  1. Алгоритм подсчета пульса на лучевой артерии и определение его свойств
  2. Ведомость подсчета объемов работ и их трудоемкостей
  3. Добавление гиперссылок
  4. Интернет-магазины Испании 29 ссылок
  5. Использование и оформление цитат и ссылок
  6. Как подсчет слов выражает смысл сонетов Вильяма Шекспира.
  7. Медитация с подсчетом мыслей

Теперь вернемся к словам "попытка" и "блокировка в памяти". Чтобы понять, как можно управлять временем жизни объекта потока, вспомним еще одну важную технику - подсчет ссылок. Когда объект с управляемым временем жизни создается, его счетчик ссылок устанавливается равным 1 - это означает, что у объекта один "пользователь". Когда объект передается другому объекту, например, помещается в очередь, то его счетчик ссылок увеличивается на 1. Если же "пользователь" больше не нуждается в объекте, то счетчик ссылок объекта уменьшается на 1. Когда счетчик ссылок становится равным 0, то это означает, что объект больше никому не нужен и его можно безопасно уничтожить. Вместе с уничтожением объекта становится недействительным его дескриптор. Таким образом, при создании объекта и его передаче арбитру, метод Add создает новый дескриптор, связывает его с потоком и устанавливает для потока счетчик ссылок, равный единице. Метод Lock увеличивает счетчик ссылок на 1, а метод Release уменьшает счетчик ссылок на 1. То есть, объект потока не будет уничтожен до тех пор, пока у него хотя бы один "пользователь". Сюда включается очень важный момент - даже если поток завершился самостоятельно и вызывал для самого себя метод Release, то объект потока не будет уничтожен до тех пор, пока все пользователи потока явно от него не откажутся с помощью метода Release. Приведем пример кода, предполагая, что ThreadManager - это объект класса TMyThreadManager, Handle - это дескриптор потока, а Thread - это объект потока:

// создание потокаHandle:= ThreadManager.Add(TSomeThread.Create);....// работа с потокомThread:= ThreadManager.Lock(Handle);if Assigned(Thread) thenbegin....end;....// уничтожение потокаThreadManager.Release(Handle);

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


<== предыдущая страница | следующая страница ==>
Потоки и дескрипторы| Реализация параллельного потока

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