Программирование для Windows NT

Создание семафора


Для создания семафора приложение должно вызвать функцию CreateSemaphore, прототип которой приведен ниже:

HANDLE CreateSemaphore(

  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // атрибуты

                                               // защиты

  LONG lInitialCount,  // начальное значение счетчика семафора

  LONG lMaximumCount,  // максимальное значение

                       // счетчика семафора

  LPCTSTR  lpName);     // адрес строки с именем семафора

Этой функцией пользоваться достаточно просто.

В качестве атрибутов защиты вы можете передать значение NULL.

Через параметры lInitialCount и lMaximumCount передается, соответственно, начальное и максимальное значение счетчика, связанного с создаваемым семафором. Начальное значение счетчика lInitialCount должно быть больше или равно нулю и не должно превосходить максимальное значение счетчика, передаваемое через параметр lMaximumCount.

Имя семафора указывается аналогично имени рассмотренного нами ранее объекта Mutex с помощью параметра lpName.

В случае удачного создания семафора функция CreateSemaphore возвращает его идентификатор. В случае возникновения ошибки возвращается значение NULL, при этом код ошибки можно узнать при помощи функции GetLastError.

Так как имена семафоров доступны всем приложениям в системе, возможно возникновение ситуации, когда приложение пытается создать семафор с уже использованным именем. При этом новый семафор не создается, а приложение получает идентификатор для уже существующего семафора. Если возниклав такая ситуация, функция GetLastError, вызванная сразу после функции CreateSemaphore, возвращает значение ERROR_ALREADY_EXISTS.



Содержание раздела