Синхронизация процессов с использованием флага - PullRequest
0 голосов
/ 04 октября 2018

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

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

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

1 Ответ

0 голосов
/ 04 октября 2018

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

...