Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_po_sp.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
308.78 Кб
Скачать
  1. Локальная память потока

Динамическая локальная память потока (thread local storage, TLS) представляет собой массив указателей, доступ к которым осуществляется через индексы при помощи специальных функций Win32 API. Этот массив указателей

автоматически поддерживается операционной системой для каждого потока и содержит, по меньшей мере, tls_minimum_available указателей. Порядок

работы с локальной памятью потока следующий:

□ распределение указателя;

□ работа с указателем;

□ освобождение указателя.

Прежде чем использовать какой-либо указатель, его нужно распределить. Это делается при помощи функции TisAiioc. После распределения

указателя для каждого потока становится доступной своя копия этого указателя. Для работы с указателями локальной памяти потока используются функции TisSetvalue и TisGetvalue, которые соответственно записывают некоторое

значение и читают значение из локальной памяти потока. После окончания работы с указателем его нужно освободить, вызвав функцию TisFree. Если DLL (динамически подключаемая библиотека) загружается статически, то динамический вызов функций является не лучшим подходом к работе с локальной памятью потока, т. к. замедляет работу приложения. В случае статической загрузки DLL информация о необходимой локальной памяти для каждого потока может быть получена на эта[пе компиляции DLL. Для этого в компиляторе Visual C++ фирмы Microsoft введен спецификатор памяти declspec(thread), который может использоваться только с глобальными или статическими переменными. Естественно, что этот спецификатор может использоваться и в обычных программах, но там его использование не имеет смысла, т. к. в этом случае в каждом потоке можно определить локальные переменные как в обычных функциях. Если спецификатор declspec (thread) используется при объявлении некоторой переменной, то система создает отдельный экземпляр этой переменной для каждого потока приложения, в котором используется эта переменная. Память, выделяемая под такие переменные, называется статической локальной памятью потока.

  1. Потоки в Windows.

Потоком в Windows называется объект ядра, которому операционная система выделяет процессорное время для выполнения приложения. Каждому потоку принадлежат следующие ресурсы:

□ код исполняемой функции;

□ набор регистров процессора;

□ стек для работы приложения;

□ стек для работы операционной системы;

□ маркер доступа, который содержит нформацию для системы безопасности.

Все эти ресурсы образуют контекст потока в Windows. Кроме дескриптора каждый поток в Windows также имеет свой идентификатор, который уникален для потоков выполняющихся в системе. Идентификаторы потоков используются служебными программами, которые позволяют пользователям системы отслеживать работу потоков.

В операционных системах Windows различаются потоки двух типов:

□ системные потоки;

□ пользовательские потоки.

Системные потоки выполняют различные сервисы операционной системы и запускаются ядром операционной системы. Пользовательские потоки служат для решения задач пользователя и

запускаются приложением. В работающем приложении различаются потоки двух типов:

□ рабочие потоки (working threads);

□ потоки интерфейса пользователя (user interface threads).

Рабочие потоки выполняют различные фоновые задачи в приложении.

Потоки интерфейса пользователя связаны с окнами и выполняют обработку сообщений, поступающих этим окнам. Каждое приложение имеет, по крайней мере, один поток, который называется первичным (primary) или главным

(main) потоком. В консольных приложениях это поток, который исполняет функцию main. В приложениях с графическим интерфейсом это поток, который исполняет функцию WinMain.

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