Синхронизация процессов с использованием флага
Я изучаю операционные системы через онлайн-курс, и я наткнулся на некоторые программные решения для синхронизации процессов. Учитель объясняет все программные решения, начиная с использования одного turn
переменная вплоть до решения Петерсона.
У меня есть сомнения в самом базовом подходе. Пожалуйста, обратитесь к приложенному скриншоту из видео курса для ясности. Подход заключается в использовании одного turn
переменная в случае двух процессов и хранить 1 или 2 по очереди в зависимости от того, какой процесс хочет получить доступ к критическому разделу. Этот подход гарантирует взаимное исключение, но не удовлетворяет требованию прогресса, потому что если turn
изначально равен 1, и P2 сначала хочет войти в критическую секцию, затем он будет просто заблокирован, ожидая в цикле while, даже если P1 не находится в критической секции. Моя идея состоит в том, чтобы начать turn
как -1 и теперь продолжаем. Ни один процесс не будет заблокирован в зависимости от других.
Я проверил несколько онлайн-курсов, но никто не обсуждает это простое изменение и скорее переходит к продвинутым решениям, таким как алгоритм Петерсона или семафоры. Я правильно думаю? Мой подход правильный?
1 ответ
То, что вы здесь описываете, называется "строгим чередованием". Ваше предложение изменить алгоритм так, чтобы turn
изначально -1
не сработает В вашем примере, если turn
не равно 2, то процесс 1 не будет блокироваться. Если turn
не равно 1, то процесс 2 не будет блокироваться. Первоначально, если turn
является -1
тогда ни процесс 1, ни процесс 2 не будут блокироваться. В результате оба могут выполнять свои критические секции одновременно. У вас больше нет свойства взаимного исключения.