Шаг 66.
Семафоры

    На этом шаге мы рассмотрим семафоры и перечислим функции работы с ними.

    Семафор представляет собой глобальный объект, позволяющий синхронизировать работу двух или нескольких процессов или потоков. Для программиста семафор - это просто счетчик (хотя манипулировать им можно только при помощи специальных функций). Если счетчик равен N, это означает, что к ресурсу имеют доступ N процессов. Рассмотрим функции для работы с семафорами.

    CreateSemaphor - создает глобальный объект-семафор. Возвращает дескриптор семафора. Параметры функции:

    OpenSemaphor - открыть уже созданный семафор. Возвращает дескриптор семафора. Данную функцию используют не так часто. Обычно создают семафор и присваивают его дескриптор глобальной переменной, а потом используют этот дескриптор в порождаемых потоках. Параметры функции:

    WaitForSingleObject - ожидать открытия семафора. При успешном завершении, т.е. открытии доступа к объекту, функция возвращает 0. Значение 102h говорит о том, что заданный период ожидания закончился. Параметры функции:

    ReleaseSemaphor - освободить семафор и тем самым открыть доступ к ресурсу другим процессам. Параметры функции:

    Рассмотрим алгоритм работы с семафором. Сначала при помощи функции CreateSemaphor создается семафор и его дескриптор присваивается глобальной переменной. Перед попыткой обращения к ресурсам, доступ к которым необходимо ограничить, поток должен вызвать функцию WaitForSingleObject. При открытии доступа функция возвращает 0. По окончании работы с ресурсом следует вызвать функцию ReleaseSemaphor. Тем самым увеличивается счетчик доступа на 1. С помощью семафора можно регулировать количество потоков, которые одновременно могут иметь доступ к ресурсу. Максимальное значение счетчика как раз и определяет, сколько потоков могут получить доступ к ресурсу одновременно. Но обычно максимальное значение полагают равным 1.

    На следующем шаге мы рассмотрим события.




Предыдущий шаг Содержание Следующий шаг