Синхронизация процессов с использованием флага

Я изучаю операционные системы через онлайн-курс, и я наткнулся на некоторые программные решения для синхронизации процессов. Учитель объясняет все программные решения, начиная с использования одного turn переменная вплоть до решения Петерсона.

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

Я проверил несколько онлайн-курсов, но никто не обсуждает это простое изменение и скорее переходит к продвинутым решениям, таким как алгоритм Петерсона или семафоры. Я правильно думаю? Мой подход правильный? введите описание изображения здесь

1 ответ

То, что вы здесь описываете, называется "строгим чередованием". Ваше предложение изменить алгоритм так, чтобы turn изначально -1 не сработает В вашем примере, если turn не равно 2, то процесс 1 не будет блокироваться. Если turn не равно 1, то процесс 2 не будет блокироваться. Первоначально, если turn является -1тогда ни процесс 1, ни процесс 2 не будут блокироваться. В результате оба могут выполнять свои критические секции одновременно. У вас больше нет свойства взаимного исключения.

Другие вопросы по тегам