доступом к устройствам или другим ресурсам. Семафор можно рассматривать как ключ к ресурсам. Этим ключом может владеть в любой момент времени только один процесс или поток. Какал бы задача ни владела этим ключом, он надежно запирает (блокирует) нужные ей ресурсы для ее монопольного использования. Блокирование ресурсов заставляет другие задачи, которые желают воспользоваться этими ресурсами, ожидать до тех пор, пока они не будут разблокированы и снова станут доступными. После разблокирования ресурсов следующая задача, ожидающая семафор, получает его и доступ к ресурсам. Какал задача будет следующей, определяется стратегией планирования, действующей для данного потока или процесса.
Операции по управлению семафором
Как упоминалось выше, к семафору можно получить доступ только с помощью специальных операций, подобных тем, которые выполняются с объектами. Это операции декремента, P(), и инкремента, V(). Если объект Mutex представляет собой семафор, то логика реализации операций P (Mutex) и V (Mutex)
P(Mutex)
if (Mutex > 0) {
Mutex--;
} else {
Блокирование по объекту Mutex;
}
V(Mutex)
if(Oчepeдь доступа к объекту Mutex не пуста){
Передача объекта Мьютекс следующей задаче;
} else {
Mutex++;
}
Реализация зависит от конкретной систе
Операции с семафором могут иметь другие имена:
Операци
Операци
Значение семафора зависит от его типа.
Стандарт POSIX определяет несколько типов семафоров. Эти семафоры испо
Таблица 5 .1. Типы семафоров, определенные стандартом POSIX
Процессы или потоки | Механизм, используемый для реализации взаимного исключения в критическом разделе кода | |
Процессы или потоки | Механизм, используемый д | |
Процессы или потоки | Механизм, используемый д | |
Событийный мьютекс остается заблокированным потоком до тех пор, пока не будет получен соответствующий сигнал | ||
Процессы или потоки | Аналогичен событийному мьютексу, но включает несколько событий или условий |
Операционные системы, которые не противоречат спецификации Single UNIX Specification или стандарту POSIX Standard, поддерживают реализацию семафоров, которые являются частью библиотеки libpthread (соответствующие функции объявлены в заголовке pthread. h).
Мьютексные семафоры