1. Mutual Exclusion (делается в первую очередь там, где можно).
Можно построить над ресурсом абстракцию, не требующую эксклюзивного доступа.
− Не всегда возможно.
− Требует доп. затрат ресурсов.
2. Hold&Wait. Идеи:
- Заставить все процессы запрашивать все необходимые им ресурсы до начала выполнения. − Неэффективное использование ресурсов.
- При возникновении потребности в ресурсе освобождаются все уже имеющиеся и запрашиваем их обратно вместе с доп. ресурсом. − Неэффективно. − Не всегда реализуемо.
- Предоставить прикладному программисту неблокирующие функции запроса ресурсов — единственное работающее решение.
3. No Preemption (практически не реализуемо) — можно разрешить ОС передавать ресурсы от одного процесса другому:
- Заморозить процесс, владеющий ресурсом.
- Передать ресурс другому процессу.
- После освобождения ресурса вернуть его исходному владельцу и продолжить выполнение.
− Чтобы передать ресурс, он должен быть в стабильном состоянии.
− Ресурс может быть зависимым.
Применимо только в очень частных случаях внутри конкретного проекта.
4. Circular Wait. Идеи:
- Позволить процессам в каждый момент времени владеть только одним ресурсом.
- Ввести нумерацию ресурсов. Обязать процессы запрашивать ресурсы строго в порядке возрастания их номеров. − Неэффективно.