41 std::lock_guard<std::mutex> lk(mutex_);
42 if (queue_.empty() || queue_.back()->list.size() >= batch_size_) {
43 queue_.push_back(std::make_unique<BatchQueueItem>());
44 queue_.back()->list.reserve(batch_size_);
46 queue_.back()->list.push_back(std::move(
data));
52 std::vector<T>
Pop(
int timeout_ms) {
53 std::unique_ptr<BatchQueueItem> item =
nullptr;
55 std::unique_lock<std::mutex> lk(mutex_);
57 cv_.wait_for(lk, std::chrono::microseconds(timeout_ms), [&] {
58 return !queue_.empty() && queue_.front()->list.size() >= batch_size_;
62 return std::vector<T>();
64 item = std::move(queue_.front());
67 return std::move(item->list);