From 7e859954211ea98a3f1e00c6a644fe29b43fe97b Mon Sep 17 00:00:00 2001 From: Ilia Minkin Date: Sat, 1 Feb 2025 20:56:54 -0500 Subject: [PATCH] Merged v1.1.0 --- src/graphconstructor/taskqueue.h | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/graphconstructor/taskqueue.h diff --git a/src/graphconstructor/taskqueue.h b/src/graphconstructor/taskqueue.h new file mode 100644 index 0000000..d7b8cc8 --- /dev/null +++ b/src/graphconstructor/taskqueue.h @@ -0,0 +1,79 @@ +#ifndef _TASK_QUEUE_H_ +#define _TASK_QUEUE_H_ +#define __STDC_LIMIT_MACROS + +#include +#include +#include "common.h" + +namespace TwoPaCo +{ + class TaskQueue + { + public: + TaskQueue() + { + + } + + bool try_push(const Task & task) + { + bool ret = false; + mutex_.lock(); + + if (queue_.size() < capacity_) + { + queue_.push_back(task); + ret = true; + } + + mutex_.unlock(); + return ret; + } + + bool try_pop(Task& task) + { + bool ret = false; + mutex_.lock(); + if (queue_.size() > 0) + { + task = queue_.front(); + queue_.pop_front(); + ret = true; + } + + mutex_.unlock(); + return ret; + } + + void set_capacity(size_t capacity) + { + mutex_.lock(); + capacity_ = capacity; + mutex_.unlock(); + } + + size_t size() + { + mutex_.lock(); + size_t ret = queue_.size(); + mutex_.unlock(); + return ret; + } + + size_t capacity() const + { + return capacity_; + } + + private: + size_t capacity_; + std::mutex mutex_; + std::deque queue_; + DISALLOW_COPY_AND_ASSIGN(TaskQueue); + }; + + typedef std::unique_ptr TaskQueuePtr; +} + +#endif