|
Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
|
Policy-based queue template. More...
#include <policy_queue.h>


Public Types | |
| using | sync_policy_type = SyncPolicy |
| using | bound_policy_type = BoundPolicy |
| using | overflow_policy_type = OverflowPolicy |
Public Member Functions | |
| policy_queue () | |
| Construct queue with default policies. | |
| policy_queue (BoundPolicy bound_policy) | |
| Construct queue with bound policy. | |
| policy_queue (SyncPolicy sync_policy, BoundPolicy bound_policy, OverflowPolicy overflow_policy) | |
| Construct queue with all policies. | |
| ~policy_queue ()=default | |
| Destructor. | |
| policy_queue (const policy_queue &)=delete | |
| policy_queue & | operator= (const policy_queue &)=delete |
| policy_queue (policy_queue &&)=delete | |
| policy_queue & | operator= (policy_queue &&)=delete |
| auto | schedule (std::unique_ptr< job > &&work) -> common::VoidResult override |
| Schedule a job (delegates to enqueue) | |
| auto | get_next_job () -> common::Result< std::unique_ptr< job > > override |
| Get next job (delegates to dequeue) | |
| auto | enqueue (std::unique_ptr< job > &&value) -> common::VoidResult |
| Enqueue a job into the queue. | |
| template<typename JobType , typename = std::enable_if_t<std::is_base_of_v<job, JobType>>> | |
| auto | enqueue (std::unique_ptr< JobType > &&value) -> common::VoidResult |
| Type-safe enqueue for job subclasses. | |
| auto | dequeue () -> common::Result< std::unique_ptr< job > > |
| Dequeue a job (blocking if sync policy supports it) | |
| auto | try_dequeue () -> common::Result< std::unique_ptr< job > > |
| Try to dequeue a job (non-blocking) | |
| auto | empty () const -> bool |
| Check if queue is empty. | |
| auto | size () const -> std::size_t |
| Get queue size. | |
| auto | clear () -> void |
| Clear all jobs from queue. | |
| auto | stop () -> void |
| Stop the queue. | |
| auto | is_stopped () const -> bool |
| Check if queue is stopped. | |
| auto | get_capabilities () const -> queue_capabilities override |
| Get queue capabilities. | |
| auto | sync_policy () -> SyncPolicy & |
| Get reference to sync policy. | |
| auto | sync_policy () const -> const SyncPolicy & |
| Get const reference to sync policy. | |
| auto | bound_policy () -> BoundPolicy & |
| Get reference to bound policy. | |
| auto | bound_policy () const -> const BoundPolicy & |
| Get const reference to bound policy. | |
| auto | overflow_policy () -> OverflowPolicy & |
| Get reference to overflow policy. | |
| auto | overflow_policy () const -> const OverflowPolicy & |
| Get const reference to overflow policy. | |
| auto | is_bounded () const -> bool |
| Check if queue is bounded. | |
| auto | is_full () const -> bool |
| Check if queue is at capacity. | |
| auto | remaining_capacity () const -> std::size_t |
| Get remaining capacity. | |
Public Member Functions inherited from kcenon::thread::scheduler_interface | |
| virtual | ~scheduler_interface ()=default |
Public Member Functions inherited from kcenon::thread::queue_capabilities_interface | |
| virtual | ~queue_capabilities_interface ()=default |
| auto | has_exact_size () const -> bool |
| Check if size() returns exact values. | |
| auto | has_atomic_empty () const -> bool |
| Check if empty() check is atomic. | |
| auto | is_lock_free () const -> bool |
| Check if this is a lock-free implementation. | |
| auto | is_wait_free () const -> bool |
| Check if this is a wait-free implementation. | |
| auto | supports_batch () const -> bool |
| Check if batch operations are supported. | |
| auto | supports_blocking_wait () const -> bool |
| Check if blocking wait is supported. | |
| auto | supports_stop () const -> bool |
| Check if stop signaling is supported. | |
Private Member Functions | |
| auto | handle_overflow (std::unique_ptr< job > &&value) -> common::VoidResult |
| Handle overflow based on overflow policy. | |
Private Attributes | |
| SyncPolicy | sync_policy_ |
| BoundPolicy | bound_policy_ |
| OverflowPolicy | overflow_policy_ |
Policy-based queue template.
Policy-based job queue template with customizable behavior.
This template class provides a flexible job queue where synchronization, bounding, and overflow behaviors are controlled by policy classes.
Uses compile-time policy-based design for:
Thread safety depends on the SyncPolicy:
| SyncPolicy | BoundPolicy | OverflowPolicy | Compatible |
|---|---|---|---|
| mutex | any | any | Yes |
| lockfree | unbounded | N/A | Yes |
| lockfree | bounded | reject/drop | Yes |
| lockfree | bounded | block | No |
| adaptive | any | any | Yes |
| SyncPolicy | Synchronization policy type |
| BoundPolicy | Bounding policy type (default: unbounded_policy) |
| OverflowPolicy | Overflow handling policy type (default: overflow_reject_policy) |
Definition at line 83 of file policy_queue.h.
| using kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_type = BoundPolicy |
Definition at line 87 of file policy_queue.h.
| using kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy_type = OverflowPolicy |
Definition at line 88 of file policy_queue.h.
| using kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_type = SyncPolicy |
Definition at line 86 of file policy_queue.h.
|
inline |
Construct queue with default policies.
Definition at line 97 of file policy_queue.h.
|
inlineexplicit |
Construct queue with bound policy.
| bound_policy | Bound policy configuration |
Definition at line 106 of file policy_queue.h.
|
inline |
Construct queue with all policies.
| sync_policy | Sync policy configuration |
| bound_policy | Bound policy configuration |
| overflow_policy | Overflow policy configuration |
Definition at line 117 of file policy_queue.h.
|
default |
Destructor.
|
delete |
|
delete |
|
inlinenodiscard |
Get reference to bound policy.
Definition at line 285 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_.
|
inlinenodiscard |
Get const reference to bound policy.
Definition at line 293 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_.
|
inline |
Clear all jobs from queue.
Definition at line 230 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Dequeue a job (blocking if sync policy supports it)
Definition at line 199 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::get_next_job().

|
inlinenodiscard |
Check if queue is empty.
Definition at line 215 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Enqueue a job into the queue.
| value | Job to enqueue |
Behavior depends on policies:
Definition at line 169 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_, kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::handle_overflow(), and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue(), and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::schedule().


|
inlinenodiscard |
Type-safe enqueue for job subclasses.
| JobType | A type derived from job |
| value | Job to enqueue |
Definition at line 191 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue().

|
inlinenodiscardoverridevirtual |
Get queue capabilities.
Reimplemented from kcenon::thread::queue_capabilities_interface.
Definition at line 257 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlineoverridevirtual |
Get next job (delegates to dequeue)
Implements kcenon::thread::scheduler_interface.
Definition at line 152 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::dequeue().

|
inlinenodiscardprivate |
Handle overflow based on overflow policy.
| value | Job that triggered overflow |
Definition at line 353 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy_, and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue().

|
inlinenodiscard |
Check if queue is bounded.
Definition at line 321 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_.
|
inlinenodiscard |
Check if queue is at capacity.
Definition at line 332 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_, and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Check if queue is stopped.
Definition at line 245 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
delete |
|
delete |
|
inlinenodiscard |
Get reference to overflow policy.
Definition at line 301 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy_.
|
inlinenodiscard |
Get const reference to overflow policy.
Definition at line 309 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy_.
|
inlinenodiscard |
Get remaining capacity.
Definition at line 343 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy_, and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlineoverridevirtual |
Schedule a job (delegates to enqueue)
| work | Job to schedule |
Implements kcenon::thread::scheduler_interface.
Definition at line 144 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue().

|
inlinenodiscard |
Get queue size.
Definition at line 223 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inline |
Stop the queue.
Definition at line 237 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Get reference to sync policy.
Definition at line 269 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Get const reference to sync policy.
Definition at line 277 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
inlinenodiscard |
Try to dequeue a job (non-blocking)
Definition at line 207 of file policy_queue.h.
References kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy_.
|
private |
Definition at line 371 of file policy_queue.h.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::bound_policy(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::is_bounded(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::is_full(), and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::remaining_capacity().
|
private |
Definition at line 372 of file policy_queue.h.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::handle_overflow(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy(), and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::overflow_policy().
|
private |
Definition at line 370 of file policy_queue.h.
Referenced by kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::clear(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::dequeue(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::empty(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::enqueue(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::get_capabilities(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::handle_overflow(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::is_full(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::is_stopped(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::remaining_capacity(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::size(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::stop(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy(), kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::sync_policy(), and kcenon::thread::policy_queue< SyncPolicy, BoundPolicy, OverflowPolicy >::try_dequeue().