ОПЕРАЦИОННЫЕ СИСТЕМЫ Вощинская Гильда Эдгаровна
Понятие нити Поток (нить, Thread ) – это набор команд, который может получать время процессора. У нити собственные: Нити разделяют: • программный счетчик • адресное пространство • стек • глобальные переменные • регистры • открытые файлы • нити-потомки • таймеры • состояние • семафоры • статистическую информацию
Реализация потоков в. Windows Использование библиотеки API Win 32 (Application Program Interface) наиболее мощный и универсальный способ работы с потоками. Поток создаётся с помощью функции APIFunction function Create. Thread( Attr: Pointer; //адрес атрибутов безопасности Stack: Dword; //размер стека для потока Start: Pointer; //начальный адрес потока par: Pointer; //аргументы потока flag: Dword; // флаг создания var ID: Dword //идентификатор потока ): THandle; //дескриптор потока
Параметры Create. Thread Attr = nil, т. е. атрибуты безопасности по умолчанию. Stack задаёт размер стека для потока. Если Stack=0, то размер совпадает с размером стека основного приложения. Start – основной. Он задаёт адрес функции, вызываемой при запуске потока. Она обязана возвращать результат типа Longint, иметь один параметр типа Pointer. При её описании указывается атрибут stdcall. Par – указатель на структуру, содержащую аргументы. Если Par=nil, то аргументов нет. Flag=0 – поток сразу начнёт работу, flag=CREATE_SUSPEND – поток начнёт работу после вызова функции Resume. Thread.
Другие функции для работы с потоками Function Resume. Thread (h. Thread: THandle): Dword; Возобновить работу потока после приостановки. h. Thread – дескриптор потока, полученный при создании. Возвращает число приостановленных потоков. Function Suspend. Thread (h. Thread: THandle): Dword; Приостановить поток. Function Close. Handle (h. Thread: THandle): Dword; Досрочно завершает поток после приостановки. Пример Thread_Exampl
Существуют две модели применения потоков: асимметричная – потоки решают разные задачи и, как правило не разделяют ресурсы; симметричная – потоки выполняют одну и ту же задачу, разделяют ресурсы и используют один и тот же код.
Класс TThread содержит функции API программирования потока. Свойства и методы класса TThread Описание класс_Thread Пример Multy. Thread
Средства синхронизации потоков 1. Метод Sinchronize Пример Synchron 1 2. Критическая секция 3. Семафоры 4. Мьютексы(двоичные семафоры)
Критическая секция - Это участок кода, в котором происходит обращение к критическому ресурсу. В Win 32 API синхронизация критических секций может осуществляться с помощью глобальной записи специального вида типа TRTLCritical. Section. Инициализация выполняется процедурой Initialize. Critical. Section(var lp. Critical. Section: TRTLCritical. Section); Перед входом в критическую секцию: Enter. Critical. Section(var lp. Critical. Section: TRTLCritical. Section); При выходе: Leave. Critical. Section(var lp. Critical. Section: TRTLCritical. Section); По окончании работы: Delete. Critical. Section(var lp. Critical. Section: TRTLCritical. Section); Пример Critical. Sect
Семафоры и мьютексы Функции для работы с семафорами и мьютксами. Описание Semaph_Mutex Пример Sem_Mutex