Читайте также:
|
|
Оба алгоритма относятся к алгоритмам взаимоисключения, построенным по чисто программному принципу, причём ответственность за взаимоисключение в обоих случаях возложена на сами процессы. При этом каждый процесс должен координировать свои действия с другими процессами, пытающимися войти в критические секции. Оба алгоритма рассчитаны на использование только в случае взаимоисключения двух процессов.
Основные условия, которым удовлетворяют оба алгоритма:
- задача взаимоисключения решается чисто программным способом;
- не делается никаких предположений об относительных скоростях выполнения процессов;
- процессы, находящиеся вне своих критических участков, не могут мешать другим процессам входить в их собственные критические участки;
- не должно быть бесконечного откладывания момента входа процессов в их критические участки.
В алгоритме Деккера управляющие переменные ResourceThread1, ResourceThread1 обеспечивают взаимоисключение, переменная ThreadNum исключает возможность бесконечного откладывания. Если оба потока пытаются получить доступ к ресурсу, то поток, номер которого указан в ThreadNum, продолжает проверку возможности доступа к ресурсу. Другой же поток в этом случае снимает свой запрос на ресурс, ожидает своей очереди доступа к ресурсу и возобновляет свой запрос на ресурс. Алгоритм Деккера решает задачу взаимных исключений, но достаточно сложным путём, корректность которого не так легко доказать.
Петерсон предложил простое и элегантное решение той же проблемы. При исполнении пролога критической секции процесс Pi заявляет о своей готовности выполнить критический участок и одновременно предлагает другому процессу приступить к его выполнению. Если оба процесса подошли к прологу практически одновременно, то они оба объявят о своей готовности и предложат выполняться друг другу. При этом одно из предложений всегда последует после другого. Тем самым работу в критическом участке продолжит процесс, которому было сделано последнее предложение.
Дата добавления: 2015-07-20; просмотров: 150 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Понятие взаимоисключения нескольких процессов и критические участки | | | Мониторы ресурсов и реализация взаимоисключения на мониторах |