Ассемблер для Windows



         

Семафоры



Семафоры.

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

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

  • 1-й параметр. Указатель на структуру, определяющую атрибуты доступа. Может иметь значение для Windows NT. Обычно данный параметр полагается равным NULL.
  • 2-й параметр. Начальное значение счетчика семафора. Определяет, сколько задач имеют доступ к ресурсу вначале.
  • 3-й параметр. Количество задач, которые имеют одновременный доступ к ресурсу.
  • 4-й параметр. Указатель на строку, содержащую имя семафора.
  • OpenSemaphore - открыть уже созданный семафор. Возвращает дескриптор семафора. Данную функцию используют не так часто. Обычно создают семафор и присваивают его дескриптор глобальной переменной, а потом используют этот дескриптор в порождаемых потоках. Параметры функции:

    • 1-й параметр. Определяет желаемый уровень доступа к семафору. Возможные значения:
    • SEMAPHORE_MODIFY_STATE = 2Н, разрешить использование функции ReleaseSemaphore,

      SYNCHRONIZE = 100000Н, разрешить использование любой функции ожидания, только для Windows NT,
      SEMAPHORE_ALL_ACCESS = 0F0000h + SYNCHRONIZE + 3H, специфицирует все возможные флаги доступа к семафору.

    • (в книге пропущен) 2-й параметр. Указывает, может ли наследоваться дескриптор семафора, возвращаемый данной функцией, процессом, созаваемым функцией CreateProcess; 0 - не может.
    • (также в книге пропущен) 3-й параметр. Указатель на ASCIIZ-строку, содержащую имя семафора.
    • WaitForSingleObject - ожидать открытие семафора. При успешном завершении, т.е. открытии доступа к объекту, функция возвращает 0. Значение 102h будет означать, что закончился заданный период ожидания. Параметры функции:

      • 1-й параметр. Дескриптор семафора.
      • 2-й параметр. Время ожидания в миллисекундах. Если параметр равен INFINITE = 0FFFFFFFFh, то время ожидания не ограничено.



      • Содержание  Назад  Вперед