Множественные — особенностью данного механизма является возможность обрабатывать в рамках одного примитива сразу несколько семафоров. Операция Р приводит к закрытию семафоров и считается выполненной, если оба семафора были открытыми.
Счётные — в этой модификации при каждом исполнении примитива допускается изменение счетчика семафора на значение больше еденицы. Начальное значение устанавливается равным количеству читателей. Каждый читатель закрывает семафор на 1, а писатель — на максимальное открывает.
В зависимости от логики работы может наблюдаться дискриминация процессов разных видов, например писатель может голодать при высокой активности запросов на чтение.
Тест-семафоры — для этой модификации вводится усложненная логика примитива V. В качестве параметров кроме семафора указывается величина R, на которую нужно изменить значение и величина Q, с которой сравнивается новое значение счетчика семафора. Если в результате разность > 0 — продолжается работа процесса, иначе — останавливается.
|
|
Механизмы синхронизации. Семафороподобные средства
В качестве примеров реализации семафорных механизмов рассмотрим специализированные команды на примере архитектуры Windows.
Семафор в данном случае ячейка памяти, обозначенная специальным тегом.
Закрыть — выполняется традиционно
открыть — реализует 2 варианта решения задачи реактивации (освобождаются все процессы и они обратно должны выполниться)
пропустить — работает аналогично операции открыть, но семафор не открывается.
Жужжать — процесс реализует активное ожидание для указанного семафора.
Отксем — открытие семафора без обработки очереди.