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