| 60 | } |
| 61 | |
| 62 | void AddTask(const Task& task) { |
| 63 | std::unique_lock<std::mutex> lock(mutex_); |
| 64 | while (queue_.full() && !stop_) { |
| 65 | queue_cv_.wait(lock); |
| 66 | } |
| 67 | if (stop_) return; |
| 68 | queue_.put(task); |
| 69 | work_cv_.notify_one(); |
| 70 | } |
| 71 | |
| 72 | private: |
| 73 | static void* ThreadWrapper(void* arg) { |