diff --git a/lib/pls/include/pls/internal/data_structures/deque.h b/lib/pls/include/pls/internal/data_structures/deque.h new file mode 100644 index 0000000..f8a3f39 --- /dev/null +++ b/lib/pls/include/pls/internal/data_structures/deque.h @@ -0,0 +1,19 @@ + +#ifndef PLS_DEQUE_H_ +#define PLS_DEQUE_H_ + +#include "work_stealing_deque.h" +#include "locking_deque.h" + +namespace pls { +namespace internal { +namespace data_structures { + +template +using deque = work_stealing_deque; + +} +} +} + +#endif //PLS_DEQUE_H_ diff --git a/lib/pls/include/pls/internal/data_structures/locking_deque.h b/lib/pls/include/pls/internal/data_structures/locking_deque.h index 36051ce..0c2a253 100644 --- a/lib/pls/include/pls/internal/data_structures/locking_deque.h +++ b/lib/pls/include/pls/internal/data_structures/locking_deque.h @@ -70,7 +70,7 @@ class locking_deque { deque_item->next_ = nullptr; tail_ = deque_item; - return deque_item->item_; + return &deque_item->content_; } Item *pop_tail() { diff --git a/lib/pls/include/pls/internal/scheduling/task.h b/lib/pls/include/pls/internal/scheduling/task.h index d2bada3..30e04b0 100644 --- a/lib/pls/include/pls/internal/scheduling/task.h +++ b/lib/pls/include/pls/internal/scheduling/task.h @@ -5,7 +5,7 @@ #include "pls/internal/helpers/profiler.h" #include "pls/internal/data_structures/aligned_stack.h" -#include "pls/internal/data_structures/work_stealing_deque.h" +#include "pls/internal/data_structures/deque.h" #include "pls/internal/scheduling/thread_state.h" @@ -21,7 +21,7 @@ class task { task *parent_; // Stack Management (reset stack pointer after wait_for_all() calls) - data_structures::work_stealing_deque::state deque_state_; + data_structures::deque::state deque_state_; protected: // TODO: Double Check with copy and move constructors, try to minimize overhead while keeping a clean API. diff --git a/lib/pls/include/pls/internal/scheduling/thread_state.h b/lib/pls/include/pls/internal/scheduling/thread_state.h index 814c0cc..0787555 100644 --- a/lib/pls/include/pls/internal/scheduling/thread_state.h +++ b/lib/pls/include/pls/internal/scheduling/thread_state.h @@ -7,7 +7,7 @@ #include "pls/internal/base/thread.h" #include "pls/internal/data_structures/aligned_stack.h" -#include "pls/internal/data_structures/work_stealing_deque.h" +#include "pls/internal/data_structures/deque.h" namespace pls { namespace internal { @@ -21,7 +21,7 @@ struct thread_state { alignas(base::system_details::CACHE_LINE_SIZE) scheduler *scheduler_; alignas(base::system_details::CACHE_LINE_SIZE) task *current_task_; alignas(base::system_details::CACHE_LINE_SIZE) data_structures::aligned_stack *task_stack_; - alignas(base::system_details::CACHE_LINE_SIZE) data_structures::work_stealing_deque deque_; + alignas(base::system_details::CACHE_LINE_SIZE) data_structures::deque deque_; alignas(base::system_details::CACHE_LINE_SIZE) size_t id_; alignas(base::system_details::CACHE_LINE_SIZE) std::minstd_rand random_;