Поделиться через


Дескрипторы ожидания

Класс WaitHandle инкапсулирует дескрипторы синхронизации Win32 и используется для представления всех объектов синхронизации в среде выполнения, в которой возможно несколько операций ожидания. Сравнение дескрипторов ожидания с другими объектами синхронизации см. в разделе Обзор примитивов синхронизации.

Класс WaitHandle представляет собой абстрактный класс. Помимо производных классов он содержит ряд статических методов, с помощью которых разрешается ожидание для нескольких событий. Классы, производные из WaitHandle, включают следующие:

Так как класс WaitHandle является производным из класса MarshalByRefObject, эти классы могут быть использованы для синхронизации действий потоков за пределами домена приложения.

Потоки могут блокироваться по отдельному дескриптору ожидания посредством вызова метода WaitOne. Кроме того, класс WaitHandle имеет перегруженные статические методы для ожидания получения сигнала всеми дескрипторами ожидания из набора (WaitAll) или для ожидания получения сигнала любым дескриптором ожидания из указанного набора (WaitAny). Перегрузки этих методов предоставляют интервалы времени ожидания для прерывания ожидания, а также возможность выхода из контекста синхронизации перед переходом в состояние ожидания, что позволяет другим потокам использовать контекст синхронизации.

В платформе .NET Framework версии 2.0 дескрипторы ожидания также имеют статический метод SignalAndWait, который позволяет потоку отправить сигнал одному дескриптору ожидания и тут же начать ожидание следующего.

Производные классы WaitHandle отличаются своей поддержкой сходства потоков. Дескрипторы ожидания событий (EventWaitHandle, AutoResetEvent и ManualResetEvent) и семафоры не поддерживают сходство потоков. Любой поток может передать сигнал дескриптору ожидания события или семафору. Мьютексы, с другой стороны, поддерживают сходство потоков. Поток, владеющий мьютексом, должен отпустить его; будет создано исключение, если поток вызовет метод ReleaseMutex для мьютекса, которым этот поток не владеет.

См. также

Основные понятия

Объекты Mutex

Классы Semaphore и SemaphoreSlim

Другие ресурсы

Управляемая поточность

Объекты и функциональные возможности работы с потоками

EventWaitHandle, AutoResetEvent, CountdownEvent и ManualResetEvent

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Исправление: метод WaitHandle.SignalAndWait не является атомарным.

Обратная связь от клиента.