/** * @Description : * @Author : chenht2022 * @Date : 2024-07-16 10:43:18 * @Version : 1.0.0 * @LastEditors : chenht * @LastEditTime : 2024-10-09 11:08:07 * @Copyright (c) 2024 by KVCache.AI, All Rights Reserved. **/ #ifndef CPUINFER_TASKQUEUE_H #define CPUINFER_TASKQUEUE_H #include #include #include #include #include #include #include class TaskQueue { public: TaskQueue(); ~TaskQueue(); void enqueue(std::function); void sync(size_t allow_n_pending); private: struct Node { std::function task; std::atomic next; Node() : task(nullptr), next(nullptr) {} Node(const std::function& t) : task(t), next(nullptr) {} }; std::atomic head; std::atomic tail; std::atomic done; std::atomic pending; std::thread workerThread; std::mutex mtx; std::condition_variable cv; void worker(); }; #endif