Взаимное исключение, прогресс, ограниченное ожидание - как доказать, используя сценарий - PullRequest
0 голосов
/ 14 апреля 2019

Приведен следующий алгоритм для задачи производитель-потребитель. Нет пользы от буфер. Синхронизация должна быть строго последовательной: если производитель произвел, потребитель должен потреблять и наоборот.

 Producer:
 while (true)
 {
 while (turn == CONSUMER);
 turn = CONSUMER;
 // produce
 }
 Consumer:
 while (true)
 {
 while (turn == PRODUCER);
 turn = PRODUCER;
 // consume
 }

Переменная int переменная является общей для обоих процессов.

PRODUCER и CONSUMER являются конечными целыми числами и также разделяются со значениями 0 и 1 соответственно. Начальное значение хода - ПРОИЗВОДИТЕЛЬ. Оцените правильность двух следующих предложений о данном алгоритме и дайте краткое объяснение. 1. Алгоритм синхронизирует производителя и потребителя строго последовательно. 2. С этим алгоритмом может произойти тупик.

Как мне показать (доказать) эти два утверждения с использованием сценария?

1 Ответ

0 голосов
/ 15 апреля 2019

1 - правда.Алгоритм действительно синхронизирует процессы строго последовательно.Чтобы продюсер мог пройти цикл, переменная turn должна быть установлена ​​в Producer, что можно сделать только после одной итерации Consumer, то же самое относится и к Consumer.Ситуация, когда производитель будет производить более 1 без потребления потребителем, невозможна.

2 - Неверно.Не может возникнуть тупик, поскольку ход всегда будет либо производителем, либо потребителем, поэтому они не могут бесконечно ждать друг друга.

...