/
Maksim_Sadovnikov
/
Executor
Обзор
Документация
Войти
/
Maksim_Sadovnikov
/
Executor
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
executor/include/executor.h
57 строк
1 KB
Maksim_Sadovnikov
Add singlton
11 май 2025, 17:37
11 май 2025, 17:37
87d0151
Код
Авторство
О чём код?
#ifndef LIB_EXECUTOR_H #define LIB_EXECUTOR_H #include <vector> #include <queue> #include <mutex> #include <thread> #include <condition_variable> #include <memory> #include <unordered_map> #include <executor/task.h> namespace executor { class Executor { public: // Делать копии нельзя Executor(const Executor&) = delete; Executor& operator=(const Executor&) = delete; // Доступ к синглтону. При первом вызове передаётся число потоков. static Executor& GetInstance(size_t numThreads = std::thread::hardware_concurrency()) { static Executor instance(numThreads); return instance; } void Submit(std::shared_ptr<Task> task); void Start(); void Shutdown(); void WorkerLoop(); std::shared_ptr<Task> FindTaskById(const std::string& id); ~Executor(); private: explicit Executor(size_t numThreads); std::vector<std::thread> workers_; std::queue<std::shared_ptr<Task>> tasks_; std::mutex mutex_; std::condition_variable cv_; bool stop_; std::unordered_map< std::string, std::shared_ptr<Task> > tasksMap_; std::mutex startMutex_; size_t numThreads_; }; } // namespace executor #endif // LIB_EXECUTOR_H