Теоретическая классификация видов взаимодействия процессов: сигналы, семафоры, мьютексы

Переменная, контролирующая вход в критическую секцию называется семафором: InterlockedExchange(&Status, 1). Status – семафор.
      Семафор – переменная специального типа, которая доступна параллельным процессам для выполнения над ней только 2х операций – открытия и закрытия. У переменной Status можно использовать весь диапазон значений. Однако на практике, переменная – значение семафора есть критический ресурс, доступ к которому осуществляется с использованием критических секций.
      Если sem > 0, то семафор открыт.
      Если sem == 0, то семафор закрыт.
      Каждый процесс, проходящий через семафор – уменьшает его значение на единицу.
      Семафор используется для получения совместного доступа к какому либо ресурсу.
Мьютекс подобны событиям с ручным сбросом. Кроме того в мьютекс можно входить повторно одной и той же нитью. Создать мьютекс можно с помощью следующей функции:
HANDLE CreateMutex(PSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, PCISIR pszName);
fInitialOwner – при создании мьютекса стать его владельцем и войти в него (мьютекс переходит в NON_SIGNALED) если true.
Вход в мьютекс по функции WaitForSingleObject
Выход по следующей функции:
BOOL ReleaseMutex(HANDLE hMutex);

Число входов в мьютекс должно равняться числу выходов. Если нить владеющая мьютексом умирает то функция WaitFor для этого мьютекса вернет значение WAIT_ABANDONED но при этом войдет в мьютекс

Комментариев нет:

Отправить комментарий