Проблема с ограниченным буфером - Почему производитель может заполнить только n – 1 буфер? - PullRequest
0 голосов
/ 09 июля 2020

Я прочитал лекцию о синхронизации.

В этой лекции было 2 слайда о проблеме ограниченного буфера (см. Ниже).

Мой вопрос касается предложения, выделенного желтым, почему правда, что производитель может заполнить только до n-1 буферных ячеек? спасибо!

enter image description here

введите описание изображения здесь

1 Ответ

0 голосов
/ 10 июля 2020

На первом слайде общие данные включают определение двух переменных: in и out . Обе переменные имеют ограниченные значения в диапазоне от 0 до n - 1, что соответствует значениям индекса, указанным для массива с именем buffer .

Предположим, что переменная в равна инициализировано в 0. Условие для while l oop в производителе: in + 1 mod n = out . Хотя это условие предотвращает перезапись непрочитанных данных, ему также удается использовать только n-1 элементов массива.

Условие производителя while l oop - пример попытки быть слишком умным. Производителю необходимо знать, когда массив заполнен. Менее умный подход - иметь еще одну переменную, хранящую количество элементов в буфере. Назовем его count , который инициализируется нулем. При добавлении элемента в буфер производитель увеличивает count . При чтении элемента из буфера потребитель уменьшает count . Буфер заполнен, когда count = n. Буфер пуст, когда count = 0. Этот подход также работает, и его преимущество заключается в использовании всех n элементов массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...