Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Грубейший, но одновременно и простейший способ выхода из ситуации взаимоблокировки заключается в уничтожении одного или нескольких процессов. Можно уничтожить процесс, находящийся в цикле взаимоблокировки. При небольшом везении другие процессы смогут продолжить работу. Если первое удаление не помогает, процедуру можно повторять до тех пор, пока цикл наконец не будет разорван.
Можно, наоборот, в качестве жертвы выбрать процесс, не находящийся в цикле,
чтобы он освободил свои ресурсы. При этом подходе уничтожаемый процесс выбирается с особой тщательностью, потому что он должен занимать ресурсы, которые
нужны некоторым процессам в цикле. Например, один процесс может использовать
принтер и требовать плоттер, другой, наоборот, получил плоттер и запрашивает
принтер. Оба попали в тупик. Третий процесс может удерживать другие принтер
и плоттер и успешно работать. Уничтожение третьего процесса приведет к освобождению этих ресурсов и разрушит взаимоблокировку первых двух процессов.
Там, где это возможно, лучше всего уничтожать те процессы, которые можно
запустить с самого начала без всяких болезненных эффектов. Например, процедуру компиляции всегда можно повторить заново, поскольку она всего лишь читает
исходный файл и создает объектный файл. Если процедуру компиляции уничтожить в процессе работы, первый ее запуск не повлияет на второй.
С другой стороны, процесс, который обновляет базу данных, не всегда можно
успешно выполнить во второй раз. Если процесс прибавляет 1 к какой-нибудь записи в базе данных, то его запуск, потом уничтожение, затем повторный запуск
приведут к прибавлению к записи 2, что неверно.
Дата публикования: 2015-01-26; Прочитано: 532 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!