Класс CSemaphore
Объект класса CSemaphore представляющий "семафор" — объект синхронизации, позволяющий ограниченное число потоков в одном или нескольких процессах для доступа к a поддерживает количество потоков, осуществляющих текущий доступ указанный ресурс.
class CSemaphore : public CSyncObject
Члены
Открытые конструкторы
Имя |
Описание |
---|---|
Создает объект CSemaphore. |
Заметки
Семафоры полезны в управление доступа к общему ресурсу, который может поддерживать только ограниченное число пользователей. Текущее количество объектов CSemaphore число дополнительных разрешенных пользователей. Если количество достигает нуля, все попытки использовать ресурс проконтролированный объектом CSemaphore будут вставлены в очередь системы и ожидание до они не будут истечения времени ожидания или числа вызывает более 0. Максимальное число пользователей, имеющих доступ к контролируемому ресурсу одновременно указан при создании объекта CSemaphore.
Чтобы использовать объект CSemaphore , создайте объект CSemaphore при необходимости. Укажите имя для ожидания семафора, и что приложение должно иметь его. Затем можно получить доступ семафор, когда конструктор завершает работу. Вызовите CSyncObject::Unlock по завершении при доступе к контролируемому ресурсу.
Альтернативный метод, чтобы использовать объекты CSemaphore добавление переменной типа CSemaphore как элемент данных, к классу необходимо отслеживать. При создании управляемого объекта, вызовите конструктор элемента данных CSemaphore, определяющий начальное число доступа, максимальный объем доступа, именем семафора (если он будет использоваться через границы процессов) и желаемые атрибуты безопасности.
Доступ к ресурсам проконтролированные объектами CSemaphore таким образом, сначала создать переменную или типа CSingleLock или ввести CMultiLock в функции-члене доступа данного ресурса. Затем вызовите функцию-член объекта Lock блокировки (например, CSingleLock::Lock). На этом этапе в поток или получит доступ к ресурсу, ожидание ресурсов для освобождения и доступа, увеличения или ожидает ресурс для освобождения и выдаст ошибку времени ожидания, а не сумеющ для получения доступа к ресурсу. В любом случае ресурс был доступ потокобезопасным способом. Освобождение ресурс, использование функции-члена Unlock объекта блокировки (например, CSingleLock::Unlock) или разрешить объект блокировки к падению из области.
Кроме того, можно создать объект CSemaphore изолированный и получить доступ к его явно перед попыткой получить доступ к контролируемому ресурсу. Этот метод, пока кто-нибудь при чтении clearer в свой исходный код, более прональн к ошибке.
Дополнительные сведения о том, как использовать объекты CSemaphore см. в статье Многопоточность. Использование классов синхронизации.
Иерархия наследования
CSemaphore
Требования
Header: afxmt.h