16 #include "tensorflow_serving/batching/incremental_barrier.h"
22 #include "absl/functional/bind_front.h"
23 #include "tensorflow/core/platform/logging.h"
25 namespace tensorflow {
31 : left_(1), done_callback_(std::move(callback)) {}
34 DCHECK_GE(left_.load(std::memory_order_relaxed), 0);
36 if (left_.fetch_sub(1, std::memory_order_acq_rel) - 1 == 0) {
37 IncrementalBarrier::DoneCallback done_callback =
38 std::move(done_callback_);
44 IncrementalBarrier::BarrierCallback Inc() {
45 left_.fetch_add(1, std::memory_order_acq_rel);
48 return absl::bind_front(&InternalIncrementalBarrier::operator(),
this);
52 std::atomic<int> left_;
53 IncrementalBarrier::DoneCallback done_callback_;
56 IncrementalBarrier::IncrementalBarrier(DoneCallback done_callback)
60 IncrementalBarrier::~IncrementalBarrier() { (*internal_barrier_)(); }
62 IncrementalBarrier::BarrierCallback IncrementalBarrier::Inc() {
63 return internal_barrier_->Inc();