// Copyright 2018 The Chromium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
#ifndef WORKER_POOL_H_ | |
#define WORKER_POOL_H_ | |
#include <condition_variable> | |
#include <mutex> | |
#include <queue> | |
#include <thread> | |
#include "base/logging.h" | |
#include "base/macros.h" | |
#include "task.h" | |
class WorkerPool { | |
public: | |
WorkerPool(); | |
WorkerPool(size_t thread_count); | |
~WorkerPool(); | |
void PostTask(Task work); | |
private: | |
void Worker(); | |
std::vector<std::thread> threads_; | |
std::queue<base::OnceClosure> task_queue_; | |
std::mutex queue_mutex_; | |
std::condition_variable_any pool_notifier_; | |
bool should_stop_processing_; | |
DISALLOW_COPY_AND_ASSIGN(WorkerPool); | |
}; | |
#endif // WORKER_POOL_H_ |