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


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

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

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

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

 

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

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

 

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

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