Главная arrow С++ (часть 3) arrow Объекты синхронизации в Windows

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

Операционная система Windows поддерживает различные типы объектов синхронизации. Первый тип — классический семафор. При использовании семафора доступ к ресурсу можно полностью синхронизировать, т. е. один и только один поток или процесс сможет обращаться к ресурсу в каждый конкретный момент времени, или семафор может позволить лишь небольшому числу процессов или потоков получать доступ в любой момент времени. Семафоры реализованы с помощью счетчика, текущее значение которого увеличивается, когда семафор предоставляется программе, и уменьшается, когда он освобождается.
Второй тип объекта синхронизации — мьютекс-семафор или просто мьютекс (mutex) для краткости. Мьютекс синхронизирует доступ к ресурсу таким образом, что один и только один поток или процесс может обращаться к ресурсу в каждый момент времени. По существу, мьютекс — это специальная версия стандартного семафора.
Третий тип объекта синхронизации — объект-событие. Его можно применять для блокировки доступа к ресурсу до тех пор, пока какой-нибудь другой поток или процесс не сообщит, что ресурс можно использовать (т. е. объект-событие сигнализирует о том, что заданное событие произошло).
Четвертый тип объекта синхронизации — таймер ожидания. Такой таймер блокирует выполнение потока до определенного времени. Можно также создать очереди таймеров, которые представляют собой списки таймеров ожидания.
Вы можете запретить использовать часть кода более чем одному потоку в каждый конкретный момент времени, превратив ее в критическую секцию с помошью объекта-критической секции. Как только в критическую секцию вошел один поток, никакой другой поток не может ее использовать до тех пор, пока первый поток не покинет критическую секцию.
В этой главе будет применен только один тип объекта синхронизации — мьютекс, описание которого дано в следующем разделе. Но программисту на С++ доступны все объекты синхронизации, предоставляемые операционной системой Windows. Как уже отмечалось, одно из главных преимуществ, обусловленное тем, что язык С++ полагается на поддержку многопоточности операционной системой, — все средства многопоточности у вас под началом.