// https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h
#include <iostream>
#include <thread>
#include <vector>
#include <functional>
#include <condition_variable>
#include <chrono>
#include <mutex>
#include <queue>
class Executor
{
private:
enum class ExecutorStatus {
Work,
Shutdown,
};
public:
explicit Executor(size_t thread_count)
: thread_count_(thread_count)
{
workers_.reserve(thread_count);
for (auto i = 0; i < thread_count; ++i) {
workers_.emplace_back([this]{
for (;;;) {
}
})
}
}
~Executor() {
// TODO:
}
void add_task(const std::function<void()> & function) {
if (status_ != ExecutorStatus::Work) {
return;
}
}
private:
ExecutorStatus status_;
std::mutex mutex_;
std::condition_variable condition_;
std::queue< std::function<void()> > tasks;
size_t thread_count_;
std::vector<std::thread> workers_;
};
int main() {
Executor executor(5);
executor.add_task([]() {
std::cout << "Start" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Finish" << std::endl;
});
std::this_thread::sleep_for(std::chrono::seconds(3));
executor.add_task([]() {
std::cout << "Start" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Finish" << std::endl;
});
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "Hello, World!" << std::endl;
return 0;
}
Comments
0 B
|👍
/👎