Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 2009.doc
Скачиваний:
77
Добавлен:
13.11.2019
Размер:
2 Мб
Скачать

3.6.5Сравнение объектов, используемых для синхронизации потоков

В следующей таблице суммируются сведения о различных объектах ядра примени тельно к синхрониаации потоков.

Таблица 3.2. Объекты, используемые для синхронизации потоков

Объект

Находится в занятом состоянии, когда

Переходит в свободное состояние, когда

Побочный эффект успешного ожидания

Процесс Поток

процесс еще активен поток еще активен

процесс завершается (ExitProcess, TerminateProcess) поток завершается (ExitThread, TerminateThread)

Нет Нет

Объект

Находится в занятом состоянии, когда:

Переходит в свободное состояние, когда:

Побочный эффект успешного ожидания

Задание

время, выделенное заданию, еще не истекло

время, выделенное заданию, истекло

Нет

Файл

выдан запрос на ввод-вывод

завершено выполнение запроса на ввод-вывод

Нет

Консольный ВВОД

ввода нет

ввод есть

Нет

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

в файловой системе нет изменений

файловая система обнаруживает изменения

Сбрасывается в исходное состояние

Событие с автосбросом

вызывается ResetEvent, PulseEvent или ожидание успешно завершилось

вызывается SetEvent или PulseEvent

Сбрасывается в исходное состояние

Событие со сбросом вручную

вызывается ResetEvent или PulseEvent

вызывается SetEvent или PulseEvent

Нет

Ожидаемый таймер с автосбросом

вызывается CancelWaitable- Тiтеr или ожидание успешно завершилось

наступает время срабатывания (SetWaitableTimer)

Сбрасывается в исходное состояние

Ожидаемый таймер со сбросом вручную

вызывается CancelWaitableTimer

наступает время срабатывания (SetWaitableTimef)

Нет

Семафор

ожидание успешно завершилось

счетчик > 0 (ReleaseSemaphore)

Счетчик уменьшается на 1

Мьютекс

ожидание успешно завершилось

поток освобождает мьютекс (ReleaseMutex)

Передается пото ку во владение

Критическая секция (поль зовательского режима)

ожидание успешно завершилось ( (Try)EnterCriticalSection)

поток освобождает критическую секцию (LeaveCriticalSection)

Передается потоку во владение

Interlocked-функции (пользовательского режима) никогда не приводят к исключе нию потока из числа планируемых; они лишь изменяют какое-то значение и тут же возвращают управление.

При синхронизации потоков чащс всего используются функции WaitForSingleObject и WaitForMultipleObjects. OднaкoвWindows ecть и дpyгиe, нecкoлькo oтличaющиecя фyнк ции, которые можно применять с той же целью. В дальней