| 104 | } |
| 105 | |
| 106 | Status Take(Tensor* output) { |
| 107 | std::unique_lock<std::mutex> lock(mu_); |
| 108 | |
| 109 | take_cv_.wait(lock, [this]() { return !queue_.empty() || is_closed_; }); |
| 110 | |
| 111 | if (TF_PREDICT_FALSE(queue_.empty() && is_closed_)) { |
| 112 | return Status(errors::OutOfRange( |
| 113 | strings::StrCat("All works in work queue ", name_, " are taken."))); |
| 114 | } |
| 115 | |
| 116 | output->scalar<string>().setConstant(std::move(queue_.front())); |
| 117 | queue_.pop_front(); |
| 118 | |
| 119 | return Status::OK(); |
| 120 | } |
| 121 | |
| 122 | Status GetSize(Tensor* size) { |
| 123 | std::unique_lock<std::mutex> lock(mu_); |