У алгоритма банкира имеются серьезные недостатки, из-за которых разработчик может выбрать другой подход для решения проблемы тупиков:
· Алгоритм банкира исходит из фиксированного количества ресурсов.
· Он требует, чтобы число работающих пользователей оставалось постоянным
· Данный алгоритм требует, чтобы распределитель гарантированно удовлетворял запросы за конечный период времени. Очевидно, что для реальных систем нужны более конкретные гарантии.
· Алгоритм требует, чтобы клиенты гарантированно возвращали ресурсы. Опять таки в реальных системах требуются, гораздо более конкретные гарантии.
· Требуется, чтобы пользователи заранее указали свои максимальные потребности в ресурсах. При динамическом распределении ресурсов трудно оценить максимальные потребности пользователей.
Имеются и другие способы предотвращения тупиков.
Возникновение тупиков является потенциальной проблемой любой операционной системы. Они возникают, когда имеется группа процессов, каждый из которых пытается иметь эксклюзивный доступ к некоторым ресурсам и претендует на ресурсы, принадлежащие другому процессу. В итоге все они оказываются в состоянии бесконечного ожидания.
С тупиками можно бороться, можно их обнаруживать, избегать и восстанавливать систему после тупиков. Однако цена подобных действий высока и соответствующие усилия должны предприниматься только в системах, где игнорирование тупиковых ситуаций приводит к катастрофическим последствиям.
Считается, что в будущих системах тупики станут более критичным фактором, так как системы будущего:
· будут в большей степени ориентированы на параллельную работу
· будет преимущественно реализовываться динамическое распределение ресурсов
· растет тенденция рассматривать данные как ресурс, в связи с чем количество ресурсов возрастет.
Для того, чтобы облегчить написание корректных программ, было предложено высокоуровневое средство синхронизации, называемое монитором.
Монитор - это набор процедур, переменных и структур данных. Процессы могут вызывать процедуры монитора, но не имеют доступа к внутренним данным монитора. Мониторы имеют важное свойство, которое делает их полезными для достижения взаимного исключения: только один процесс может быть активным по отношению к монитору.
Компилятор обрабатывает вызовы процедур монитора особым образом. Когда процесс вызывает процедуру монитора, то первые несколько инструкций этой процедуры проверяют, не активен ли какой-либо другой процесс по отношению к этому монитору. Если да, то вызывающий процесс приостанавливается, пока другой процесс не освободит монитор. Таким образом, исключение входа нескольких процессов в монитор реализуется не программистом, а компилятором, что делает ошибки менее вероятными.