На первом слайде общие данные включают определение двух переменных: 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 элементов массива.