Переменная, контролирующая вход в
критическую секцию называется семафором: 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 но при этом войдет в мьютекс
Комментариев нет:
Отправить комментарий