Меня интересует структура данных, идентичная Java BlockingQueue, за исключением того, что она должна иметь возможность пакетных объектов в очереди. Другими словами, я хотел бы, чтобы продюсер мог помещать объекты в очередь, но имеет потребительский блок на take(), пока очередь не достигнет определенного размера (размер партии).
Затем, как только очередь достигнет размера партии, производитель должен заблокировать на put() до тех пор, пока потребитель не будет потреблять все элементы в очереди (в этом случае производитель начнет производить снова и потребительский блок до тех пор, пока пакет снова достигнут).
Существует ли аналогичная структура данных? Или я должен писать (что я не против), я просто не хочу тратить свое время, если там что-то есть.
UPDATE
Возможно, немного прояснить ситуацию:
Ситуация всегда будет следующей. В очереди может быть несколько продюсеров, добавляющих элементы, но никогда не будет более одного потребителя, берущего элементы из очереди.
Теперь проблема заключается в том, что несколько этих установок работают параллельно и последовательно. Другими словами, производители производят товары для нескольких очередей, в то время как потребители сами по себе могут также быть производителями. Это легче воспринимать как ориентированный график производителей, потребителей-производителей и, наконец, потребителей.
Причина, по которой производители должны блокировать до тех пор, пока очереди не будут пустыми (@Peter Lawrey), потому что каждый из них будет работать в потоке. Если вы оставите их просто создавать по мере того, как пространство станет доступным, вы столкнетесь с ситуацией, когда у вас слишком много потоков, которые пытаются обрабатывать слишком много вещей одновременно.
Может быть, связать это с службой исполнения может решить проблему?