mirror of
https://github.com/ProgramSnail/build_system_2022.git
synced 2025-12-06 00:48:42 +00:00
30 lines
563 B
C++
30 lines
563 B
C++
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <cstddef>
|
||
|
|
#include <functional>
|
||
|
|
#include <thread>
|
||
|
|
#include <vector>
|
||
|
|
|
||
|
|
#include "dependency_manager.hpp"
|
||
|
|
#include "task_queue.hpp"
|
||
|
|
|
||
|
|
namespace build_system {
|
||
|
|
|
||
|
|
class ThreadPool {
|
||
|
|
public:
|
||
|
|
explicit ThreadPool(size_t num_threads) : num_threads_(num_threads) {}
|
||
|
|
|
||
|
|
void addTarget(Task&& task, size_t id, const std::vector<size_t>& dependences);
|
||
|
|
|
||
|
|
void start();
|
||
|
|
|
||
|
|
void wait();
|
||
|
|
|
||
|
|
private:
|
||
|
|
size_t num_threads_;
|
||
|
|
std::vector<std::thread> threads_;
|
||
|
|
TaskQueue task_queue_;
|
||
|
|
DependencyManager dependency_manager_;
|
||
|
|
};
|
||
|
|
|
||
|
|
}; // namespace build_system
|