| // 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 UTIL_WORKER_POOL_H_ | |
| #define UTIL_WORKER_POOL_H_ | |
| #include <condition_variable> | |
| #include <functional> | |
| #include <mutex> | |
| #include <queue> | |
| #include <thread> | |
| #include "base/logging.h" | |
| class WorkerPool { | |
| public: | |
| WorkerPool(); | |
| WorkerPool(size_t thread_count); | |
| ~WorkerPool(); | |
| void PostTask(std::function<void()> work); | |
| private: | |
| void Worker(); | |
| std::vector<std::thread> threads_; | |
| std::queue<std::function<void()>> task_queue_; | |
| std::mutex queue_mutex_; | |
| std::condition_variable_any pool_notifier_; | |
| bool should_stop_processing_; | |
| WorkerPool(const WorkerPool&) = delete; | |
| WorkerPool& operator=(const WorkerPool&) = delete; | |
| }; | |
| #endif // UTIL_WORKER_POOL_H_ |