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


Класс CSemaphore

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

class CSemaphore : public CSyncObject

Члены

Открытые конструкторы

Имя

Описание

CSemaphore::CSemaphore

Создает объект CSemaphore.

Заметки

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

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

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

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

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

Дополнительные сведения о том, как использовать объекты CSemaphore см. в статье Многопоточность. Использование классов синхронизации.

Иерархия наследования

CObject

CSyncObject

CSemaphore

Требования

Header: afxmt.h

См. также

Ссылки

Класс CSyncObject

Диаграмма иерархии