У меня есть интересный побочный продукт производитель-потребитель, и я не могу обернуться вокруг его алгоритма. Таким образом, каждый продюсер будет «производить» числа между заданным диапазоном (мин., Макс.), Которые дают одинаковое напоминание о делении на данный «фактор». То же самое касается потребителя .
Дополнительные требования: конечный буфер.
Мои мысли по этому поводу:
- крупнозернистая очередь, которая использует блокировку и два условия для push и pop, наряду с рядом ожидаемых сторон и прибывающих сторон, используемых для определения очереди, все еще доступна для потребителей. (считается, что очередь доступна, если в ней еще есть элементы или есть активные авторы (прибыло! = ожидается))
- a «Класс производителя», который содержит минимальное, максимальное, частное и общую очередь в качестве полей и имеет метод, который создает и возвращает значения на основе данных полей.
- класс «Потребитель», который содержит те же поля, что и класс «Производитель», и имеет метод «потреблять», который извлекает элемент из очереди и «потребляет» (распечатывает) его. Потребитель будет потреблять до тех пор, пока очередь доступна.
Мои проблемы:
- Как можно гарантировать, что все числа между данным интервалом рабочей нагрузки (начало, конец) будут производиться и потребляться х производителями и у потребителей (х! = У)?
- Как реализовать механизм потребления?
- Как можно выполнить разбиение значений производителей и потребителей, чтобы использовались все значения интервала рабочей нагрузки?
Я думал об использовании списка массивов для «буфера», и каждый потребитель будет выполнять поиск без блокировок для «совместимого» элемента для использования, удаляя элемент, если он доступен, или повторяя попытку, если его нет. Я думаю, что это было бы неэффективно из-за потерянных циклов ЦП при «попытках».
PS : Я использую Java для этого, но псевдокод тоже хорош.
Заранее спасибо!