build_system_2022/task_queue.hpp

33 lines
567 B
C++
Raw Permalink Normal View History

2022-08-04 01:22:09 +03:00
#pragma once
#include <condition_variable>
#include <deque>
#include <mutex>
#include <optional>
#include "task.hpp"
namespace build_system {
class TaskQueue {
public:
TaskQueue() : is_closed_(false) {}
bool addIdentTask(IdentTask&& task);
std::optional<IdentTask> getIdentTask();
void close() {
std::lock_guard<std::mutex> lock(mutex_);
is_closed_ = true;
task_exist_.notify_all();
}
private:
std::deque<IdentTask> tasks_;
bool is_closed_;
std::mutex mutex_;
std::condition_variable task_exist_;
};
}; // namespace build_system