Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_Svoystva_i_klassifikatsia_protsessov.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
236.54 Кб
Скачать

17. Решение задачи взаимного исключения в Java

В языке предоставлены некоторые вещи для решения задачи взаимного исключения: любой объект, метод или участок кода может быть объявлен со спецификатором synchronized. Участок кода, выделенный таким образом всегда выполняется, по отношению к другим потокам, в режиме взаимного исключения, т. е. Если этот участок вызван потом из потока ни в одном другом потоке этот участок выполняться не будет до момента выхода из него первого потока. Для синхронизации потоков так же можно использовать синхронизирующие операторы, например для метода или объекта можно использовать методы wait() и notify(). Так же могут использоваться семафоры.

18. Событийные переменные в java.

19. Семафоры в java.

Семафор со счетчиком позволяет n задачам одновременно обращаться к ресурсу. Можно считать, что семафор «выдает разрешение» на использование ресурса, хотя никаких реальных объектов в этой схеме нет. Класс Semaphore содержится в библиотеке java.concurrent. Объект класса Semaphore в java имеет метод acquire() для закрытия и release() для открытия. При создании объекта семафора конструктору класса передается целое значение — начальное состояние семафора и логическое значение, определяющее будут ли потоки выполняться в порядке очереди, или в произвольном порядке.

20. Организация подзадач в Win

Win 32: Create Thread

Delphi/C Builder function: Begin Thread

Deplhi/C Builder Class: Tthread

Организация подзадач в ОС Windows возможна на 3 уровнях:

  1. Базовый — непосредственное использование средств ОС

  2. Подразумевает использование низкоуровневых средств, встроенных в системы программирования

  3. Использование специализированных классов

Рассмотрим организацию подзадач осуществляется вызовом функции Begin Thread.

Sa — указатель на запись, описывающий права доступа, имеет смысл знач. NiL

stacksize размер стека, выделяемой подзад. (0 по умолчанию)

Thread Function — указатель на функцию потока содерж. Ссылку на функцию, кот. Выполн-ся в рамках подзадачи

р — указатель на область памяти, содержащий параметры функции потока

creationFlag1 — режим созд. Подзадач.

  1. Создание и запуск

  2. Созд. Приост. Передач. Которое нужно старт.

Function Begin Thread(

sa: Pointer;

stacksize: Integer;

ThreadFunction: TthreadFunc;

p: pointer;

creationflag1: Integer;

var Threadld: Integer

): Thadle;

var Threadld: Integer — индикатор создания подзад.

): Функция возвращает дескриптор, созданный подзадачей т. е. Это указатель на ячейку кот. Содержит

Создание подзад. Доступна через дескриптор.

Функция подзадачи:

ThreadFunction: TthreadFunc;

type TthreadFunc = function(parameter: pointer):Integer; // возвращаем результат

Указатель на параметр(параметры)

p: pointer; p-> array(record)

Подзад. Работает до тех пор пока выполняется функция подзадачи

Операции для подзадачи:

function SuspendThread(threadHandle: TthreadID): Dword //приостанавливает

function ResumeThread(threadHandle: TthreadID): Dword //запустить

результат — код ошибки

Приоритеты подзадачей Чтобы получить значение текущего приоритета используют функцию get, а что бы установить приоритет — set.

Приоритеты для подзадач являются относительные (± относительно приоритета основной задачи)

Подзадачи завершаются, когда добавляется функция потока.

Стандартный способ завершения если заранее неизвестно кол-во итераций, используется специальный флаг.

Чтобы безопасно остановить подзадачу необходимо переодически проверять состояние флагов.

Окончательное удаление подзадачи из системы осуществляется вызовом фкнции CloseHandle(Handle)

В ОС Windows большинство системных объектов сообщают о своем состоянии с помощью сигналов. Другими словами объект может находится в сигнализирующем или несигнализирующем состоянии.

Подзадача переходит в сигнализирующее состояние в момент завершения.

Function WaitForSingleObject(

1 параметр — дескриптор

2 параметр: timeout — время в течении которого ожидается сигнал

Handle:Thandle;

dw Milliseconds:LongInt): DWORD;

function WaitForMultipleObject(n

IpHandle: pWOHhandleArray;

dWaitAll: BOOL;

dwMilliseconds: LongInt): DWORD

параметр: 1) ссылка для дескриптора

2)

  1. режим ожидания dWaitAll

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