Объекты синхронизации
Объект синхронизации — это объект, дескриптор которого можно указать в одной из функций ожидания для координации выполнения нескольких потоков. Несколько процессов могут иметь дескриптор одного и того же объекта синхронизации, что делает возможной синхронизацию между процессами.
Следующие типы объектов предоставляются исключительно для синхронизации.
Тип | Описание |
---|---|
Событие | Уведомляет один или более ожидающих потоков о том, что произошло событие. Дополнительные сведения см. в разделе Объекты событий. |
Mutex | Может принадлежать только одному потоку за раз, что позволяет потокам координировать взаимоисключающий доступ к общему ресурсу. Дополнительные сведения см. в разделе Объекты мьютекса. |
Semaphore | Поддерживает число от нуля до некоторого максимального значения, ограничивая количество потоков, которые одновременно обращаются к общему ресурсу. Дополнительные сведения см. в разделе Объекты семафора. |
Таймер ожидания | Уведомляет один или несколько ожидающих потоков о получении указанного времени. Дополнительные сведения см. в разделе Объекты таймера для ожидания. |
Хотя они доступны для других применений, следующие объекты также можно использовать для синхронизации.
Объект | Описание |
---|---|
Уведомление об изменениях | Созданное функцией FindFirstChangeNotification , ее состояние устанавливается в значение signaled, когда указанный тип изменения происходит в указанном каталоге или дереве каталогов. Дополнительные сведения см. в разделе Получение уведомлений об изменении каталога. |
Входные данные консоли | Создается при создании консоли. Дескриптор входных данных консоли возвращается функцией CreateFile при указании CONIN$ или функцией GetStdHandle . Для нее задано состояние signaled при наличии непрочитанных входных данных во входном буфере консоли, и значение без знака, если входной буфер пуст. Дополнительные сведения о консолях см. в разделе Приложения в символьном режиме. |
Задание | Создается путем вызова функции CreateJobObject . Состояние объекта задания устанавливается в состояние сигнализируется, когда все его процессы завершаются, так как было превышено указанное ограничение времени окончания задания. Дополнительные сведения об объектах заданий см. в разделе Объекты заданий. |
Уведомление о ресурсе памяти | Создано функцией CreateMemoryResourceNotification . Его состояние устанавливается в сигнал, когда указанный тип изменения происходит в физической памяти. Дополнительные сведения о памяти см. в разделе Управление памятью. |
Процесс | Создается путем вызова функции CreateProcess . Во время выполнения процесса для нее устанавливается состояние без знака, а при завершении процесса — значение signaled. Дополнительные сведения о процессах см. в разделе Процессы и потоки. |
Thread | Создается при создании нового потока путем вызова функции CreateProcess, CreateThread или CreateRemoteThread . В то время как поток выполняется, для нее устанавливается состояние без знака, а при завершении потока — значение signaled. Дополнительные сведения о потоках см. в разделе Процессы и потоки. |
В некоторых случаях в качестве объекта синхронизации можно также использовать файл, именованный канал или устройство связи. однако их использование для этой цели не рекомендуется. Вместо этого используйте асинхронный ввод-вывод и дождитесь объекта события, заданного в структуре OVERLAPPED . Безопаснее использовать объект события из-за путаницы, которая может возникнуть при выполнении нескольких одновременных перекрывающихся операций в одном файле, именованном канале или устройстве связи. В этом случае невозможно узнать, какая операция вызвала сигнал о состоянии объекта.
Дополнительные сведения об операциях ввода-вывода для файлов, именованных каналов или обмена данными см. в разделе Синхронизация и перекрытие входных и выходных данных.