21 std::function<void()> work = thread_pool->
GetNextTask();
22 while (work != NULL) {
29 : num_workers_(num_workers) {}
33 std::unique_lock<std::mutex> mutex_lock(mutex_);
34 waiting_to_finish_ =
true;
36 condition_.notify_all();
37 for (
int i = 0; i < num_workers_; ++i) {
38 all_workers_[i].join();
51 for (
int i = 0; i < num_workers_; ++i) {
52 all_workers_.push_back(std::thread(&
RunWorker,
this));
57 std::unique_lock<std::mutex> lock(mutex_);
59 if (!tasks_.empty()) {
60 std::function<void()> task = tasks_.front();
62 if (tasks_.size() < queue_capacity_ && waiting_for_capacity_) {
63 waiting_for_capacity_ =
false;
64 capacity_condition_.notify_all();
68 if (waiting_to_finish_) {
71 condition_.wait(lock);
78 std::unique_lock<std::mutex> lock(mutex_);
79 while (tasks_.size() >= queue_capacity_) {
80 waiting_for_capacity_ =
true;
81 capacity_condition_.wait(lock);
83 tasks_.push_back(closure);
86 condition_.notify_all();