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