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


Объекты синхронизации

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

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

Тип Описание
Событие Уведомляет один или более ожидающих потоков о том, что произошло событие. Дополнительные сведения см. в разделе Объекты событий.
Mutex Может принадлежать только одному потоку за раз, что позволяет потокам координировать взаимоисключающий доступ к общему ресурсу. Дополнительные сведения см. в разделе Объекты мьютекса.
Semaphore Поддерживает число от нуля до некоторого максимального значения, ограничивая количество потоков, которые одновременно обращаются к общему ресурсу. Дополнительные сведения см. в разделе Объекты семафора.
Таймер ожидания Уведомляет один или несколько ожидающих потоков о получении указанного времени. Дополнительные сведения см. в разделе Объекты таймера для ожидания.

 

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

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

 

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

Дополнительные сведения об операциях ввода-вывода для файлов, именованных каналов или обмена данными см. в разделе Синхронизация и перекрытие входных и выходных данных.