
- •1 Свойства и классификация процессов
- •2. Управление процессами в ос. Граф существования и трасса процесса
- •3. С войства и классификация ресурсов. Критический ресурс.
- •4. Свойства и классификация ресурсов. Потребляемые и восстанавливаемые ресурсы
- •5. Типовые задачи синхронизации. Взаимное исключение
- •6. Типовые задачи синхронизации. Производитель-потребитель
- •7. Типовые задачи синхронизации. Читатели и писатели
- •8. Типовые задачи синхронизации. Обедающие философы
- •9. Механизмы синхронизации. Свойства и классификация
- •10. Механизмы синхронизации. Использование механизма прерываний
- •11. Механизмы синхронизации. Двухступенчатая схема
- •12. Механизмы синхронизации. Семафоры Дейкстры
- •13. Механизмы синхронизации. Решение задачи реактивации
- •14. Механизмы синхронизации. Модификации семафоров
- •15. Механизмы синхронизации. Семафороподобные средства
- •16. Организация и управление подпроцесами в Java
- •17. Решение задачи взаимного исключения в Java
- •18. Событийные переменные в java.
- •19. Семафоры в java.
- •20. Организация подзадач в Win
- •21. Организация подзадач в Win32. Класс tThread
- •22. Механизмы синхронизации Win32. Мьютексы
- •23. Механизмы синхронизации Win32. События
- •24. Механизмы синхронизации Win32. Семафоры
- •25. Монитороподобные средства синхронизации. Критическая область.
- •26. Критическая область. Основные модификации
- •27. Мониторы Хоара
- •28. Распределенное программирование. Основные понятия
- •Каналы и передача сообщений
- •Распределенное программирование. Фильтры и сети
- •Распределенное программирование. Схемы взаимодействия
- •Распределенное программирование. Сети и сокеты.
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 уровнях:
Базовый — непосредственное использование средств ОС
Подразумевает использование низкоуровневых средств, встроенных в системы программирования
Использование специализированных классов
Рассмотрим организацию подзадач осуществляется вызовом функции Begin Thread.
Sa — указатель на запись, описывающий права доступа, имеет смысл знач. NiL
stacksize размер стека, выделяемой подзад. (0 по умолчанию)
Thread Function — указатель на функцию потока содерж. Ссылку на функцию, кот. Выполн-ся в рамках подзадачи
р — указатель на область памяти, содержащий параметры функции потока
creationFlag1 — режим созд. Подзадач.
Создание и запуск
Созд. Приост. Передач. Которое нужно старт.
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)
режим ожидания dWaitAll