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

Синхронизация потоков с объектами ядра



Читайте также:
  1. Влияние условий залегания пластов на формирование грузопотоков
  2. Восприятие энергетических полей и потоков в теле
  3. Вспышка: высокоскоростная синхронизация.
  4. Выбор метода очистки газовоздушных потоков. Свойства пыли.
  5. ДЛЯ НЕСПЕЦИАЛИЗИРОВАННЫХ ПОТОКОВ
  6. Добавление к тексту эффектов появления и исчезания и его синхронизация с видео
  7. ЗАДАНИЕ 7. Изучение работы с графическими объектами

Часто возникает необходимость синхронизировать приложения со специфическими событиями, возникающими в системе, или операциями, выполняемыми в других процессах. Скажем, если создается дочерний процесс, может быть, придется сделать так, чтобы родительский процесс ожидал его завершения и только потом продолжал свою работу.

Для синхронизации потока можно использовать следующие объекты ядра:

· Процессы

· Потоки

· Файлы

· Консольный ввод

· Уведомления об изменении файлов

· Объекты mutex

· Семафоры

· События (с автоматическим сбросом и сбросом вручную)

 

Каждый объект может находиться в одном из двух состояний: свободном (signaled) или занятом (nonsignaled). Потоки могут остановиться и ждать, пока какой-либо объект не освободится. Если, скажем, поток родительского процесса должен ждать завершения дочернего, его можно отправить "в спячку" до освобождения объекта ядра, идентифицирующего дочерний процесс.

В момент завершения соответствующих процессов объекты "процесс" получают статус свободных. Это относится и к объектам "поток". Когда поток создан и начинает исполнение своего кода, сопоставленный с ним объект ядра "поток" получает статус занятого. При завершении потока соответствующий объект ядра освобождается.

Понятия "свободен-занят" аналогичны обыкновенному флагу. Потоки спят, пока ожидаемые ими объекты заняты (флаг опущен). Объект освободился (флаг поднят) - спящий поток замечает это, просыпается и возобновляет исполнение.

Некоторые из перечисленных объектов ядра существуют лишь для синхронизации потоков. Например, поток с описателем объекта "процесс" может вызвать любые Win32 -функции, позволяющие изменить класс приоритета или получить код завершения процесса. Через этот же описатель поток может синхронизировать себя с завершением процесса. Описатель потока служит тем же целям: для управления потоком и его синхронизации с завершением другого потока.

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

Последний тип объектов ядра "двойного назначения" - "консольный ввод". Он похож на объект "файл", и для его создания применима функция СreateFile. Приложение консольного типа может использовать описатель этого объекта для чтения данных из буфера ввода, а поток - для приостановки своей деятельности до появления в буфере ввода данных, позволяющих продолжить работу.

Прочие объекты ядра: уведомления об изменении файлов, объекты mutex, семафоры и события - служат одной цели: синхронизации потоков. Ряд функций Win32, предназначенных специально для работы с этими объектами, позволяют создавать или открывать объекты, синхронизировать с ними потоки и закрывать их. Никакие другие операции с подобными объектами ядра не допускаются.

 


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






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