CSemaphore

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

Семафоры полезны при управлении доступом к общему ресурсу, который может поддерживать только ограниченное количество пользователей. Текущее количество CSemaphore объекта — это количество дополнительных пользователей. Когда значение счетчика достигнет нуля, все попытки использовать ресурс, контролируемом объекте CSemaphore будет вставлен в системной очереди и ждать, пока они либо время ожидания или граф поднимается выше 0. Максимальное количество пользователей, которым разрешен доступ к контролируемым ресурсу в одно время, заданное во время строительства объекта CSemaphore.

Чтобы использовать CSemaphore объект, объект CSemaphore создайте при необходимости. Укажите имя семафор, нужно ждать на, и ваше приложение должно сначала его владельцем. Затем можно получить доступ к семафор при возврате конструктор. Звоните CSyncObject::Unlock когда вы сделаны доступ к контролируемым ресурсов.

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

Для доступа к ресурсам contolled CSemaphore объектами таким образом, сначала создайте переменную любого типа CSingleLock или CMultiLock в функции-члена доступа вашего ресурса. Затем вызовите функцию-член Lock объекта блокировки (например, CSingleLock::Lock). На данный момент ваш поток будет либо получить доступ к ресурсу, подождать для ресурса будет выпущен и получить доступ, или для ресурса будет выпущен и время ожидания, неспособность получить доступ к ресурсу. В любом случае ваш ресурс к поточно-образом. Чтобы освободить ресурс, используйте функцию-член объекта блокировки Unlock (например, CSingleLock::Unlock), или разрешить блокировку объекта выпадают из сферы.

В качестве альтернативы можно создать отдельный объект CSemaphore и доступ к нему прямо перед попыткой получить доступ к контролируемым ресурсу. Этот метод, при этом яснее кто-то читать ваш исходный код, более подвержены ошибкам.

Для получения дополнительных сведений о том, как использовать объекты CSemaphore статью Многопоточность: как использовать классы синхронизации в Руководстве по Visual C++ программист.

# include lt;afxmt.h>

Члены классаБазовый класс | Иерархическая схема

Пример  Образца MFC МЬЮТЕКСОВ

Index