|  | // 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 <mutex> | 
|  | #include <queue> | 
|  | #include <thread> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/macros.h" | 
|  | #include "util/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  // UTIL_WORKER_POOL_H_ |