blob: 753f9970451b66167715c1da15de55effe2f5c7c [file] [log] [blame]
// 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_