|
Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
|
Adaptive queue that switches between mutex and lock-free modes. More...
#include <adaptive_job_queue.h>


Classes | |
| class | accuracy_guard |
| RAII guard that temporarily switches to accuracy mode. More... | |
| struct | stats |
| Statistics about mode switching. More... | |
Public Types | |
| enum class | mode { mutex , lock_free } |
| Operating mode. More... | |
| enum class | policy { accuracy_first , performance_first , balanced , manual } |
| Selection policy. More... | |
Public Member Functions | |
| adaptive_job_queue (policy p=policy::balanced) | |
| Create adaptive queue with specified policy. | |
| ~adaptive_job_queue () | |
| Destructor - cleans up both queue implementations. | |
| adaptive_job_queue (const adaptive_job_queue &)=delete | |
| adaptive_job_queue & | operator= (const adaptive_job_queue &)=delete |
| adaptive_job_queue (adaptive_job_queue &&)=delete | |
| adaptive_job_queue & | operator= (adaptive_job_queue &&)=delete |
| auto | schedule (std::unique_ptr< job > &&work) -> common::VoidResult override |
| Schedule a job (delegates to current queue) | |
| auto | get_next_job () -> common::Result< std::unique_ptr< job > > override |
| Get next job (delegates to current queue) | |
| auto | enqueue (std::unique_ptr< job > &&j) -> common::VoidResult |
| Enqueues a job into the current active 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 > > |
| Dequeues a job from the current active queue. | |
| auto | try_dequeue () -> common::Result< std::unique_ptr< job > > |
| Tries to dequeue a job without blocking. | |
| auto | empty () const -> bool |
| Checks if the queue is empty. | |
| auto | size () const -> std::size_t |
| Returns the current number of jobs in the queue. | |
| auto | clear () -> void |
| Clears all jobs from the queue. | |
| auto | stop () -> void |
| Signals the queue to stop. | |
| auto | is_stopped () const -> bool |
| Checks if the queue is stopped. | |
| auto | get_capabilities () const -> queue_capabilities override |
| Returns capabilities based on current mode. | |
| auto | current_mode () const -> mode |
| Get current operating mode. | |
| auto | current_policy () const -> policy |
| Get current policy. | |
| auto | switch_mode (mode m) -> common::VoidResult |
| Manually switch mode (only if policy is manual) | |
| auto | get_stats () const -> stats |
| Get statistics about queue usage. | |
| auto | require_accuracy () -> accuracy_guard |
| Request temporary accuracy mode. | |
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 | |
| void | migrate_to_mode (mode target) |
| void | update_mode_time () |
| auto | determine_mode_for_balanced () const -> mode |
Private Attributes | |
| policy | policy_ |
| std::atomic< mode > | current_mode_ |
| std::atomic< bool > | stopped_ {false} |
| std::shared_ptr< job_queue > | mutex_queue_ |
| std::unique_ptr< detail::lockfree_job_queue > | lockfree_queue_ |
| std::mutex | migration_mutex_ |
| std::atomic< int > | accuracy_guard_count_ {0} |
| std::mutex | stats_mutex_ |
| stats | stats_ |
| std::chrono::steady_clock::time_point | mode_start_time_ |
Adaptive queue that switches between mutex and lock-free modes.
This class WRAPS existing job_queue and lockfree_job_queue, providing automatic or manual mode switching based on requirements.
Definition at line 60 of file adaptive_job_queue.h.
|
strong |
Operating mode.
| Enumerator | |
|---|---|
| mutex | Using job_queue (accuracy mode) |
| lock_free | Using lockfree_job_queue (performance mode) |
Definition at line 66 of file adaptive_job_queue.h.
|
strong |
Selection policy.
| Enumerator | |
|---|---|
| accuracy_first | Always use mutex mode. |
| performance_first | Always use lock-free mode. |
| balanced | Auto-switch based on usage. |
| manual | User controls mode. |
Definition at line 74 of file adaptive_job_queue.h.
|
explicit |
Create adaptive queue with specified policy.
| p | Selection policy (default: balanced) |
Definition at line 13 of file adaptive_job_queue.cpp.
References accuracy_first, balanced, current_mode_, lock_free, manual, mutex, performance_first, and policy_.
| kcenon::thread::adaptive_job_queue::~adaptive_job_queue | ( | ) |
Destructor - cleans up both queue implementations.
Definition at line 36 of file adaptive_job_queue.cpp.
References stop(), and update_mode_time().

|
delete |
|
delete |
| auto kcenon::thread::adaptive_job_queue::clear | ( | ) | -> void |
Clears all jobs from the queue.
Definition at line 160 of file adaptive_job_queue.cpp.
|
nodiscard |
Get current operating mode.
Definition at line 217 of file adaptive_job_queue.cpp.
References current_mode_.
Referenced by adaptive_behavior_example(), different_policies_example(), and performance_monitoring_example().

|
nodiscard |
Get current policy.
Definition at line 221 of file adaptive_job_queue.cpp.
References policy_.
|
nodiscard |
Dequeues a job from the current active queue.
Definition at line 82 of file adaptive_job_queue.cpp.
References kcenon::thread::result< T >::is_ok(), kcenon::thread::queue_empty, and kcenon::thread::queue_stopped.
Referenced by adaptive_behavior_example(), different_policies_example(), performance_monitoring_example(), policy_comparison_example(), and web_server_simulation().


|
private |
Definition at line 392 of file adaptive_job_queue.cpp.
References kcenon::thread::adaptive_job_queue::stats::dequeue_count, kcenon::thread::adaptive_job_queue::stats::enqueue_count, lock_free, mutex, stats_, and stats_mutex_.
|
nodiscard |
Checks if the queue is empty.
Definition at line 144 of file adaptive_job_queue.cpp.
References lockfree_queue_, and mutex_queue_.
Referenced by different_policies_example().

|
nodiscard |
Enqueues a job into the current active queue.
| j | Unique pointer to the job being added |
Definition at line 60 of file adaptive_job_queue.cpp.
References kcenon::thread::invalid_argument, kcenon::thread::result< T >::is_ok(), and kcenon::thread::queue_stopped.
Referenced by adaptive_behavior_example(), different_policies_example(), enqueue(), performance_monitoring_example(), policy_comparison_example(), and web_server_simulation().


|
inlinenodiscard |
Type-safe enqueue for job subclasses.
This template method provides type-safe job submission, allowing callers to enqueue jobs without explicit casting. The JobType must be derived from the base job class.
| JobType | A type derived from job |
| value | A unique pointer to the job being added. |
Definition at line 149 of file adaptive_job_queue.h.
References enqueue().

|
nodiscardoverridevirtual |
Returns capabilities based on current mode.
Reimplemented from kcenon::thread::queue_capabilities_interface.
Definition at line 187 of file adaptive_job_queue.cpp.
References current_mode_, and mutex.
|
overridevirtual |
Get next job (delegates to current queue)
Implements kcenon::thread::scheduler_interface.
Definition at line 52 of file adaptive_job_queue.cpp.
|
nodiscard |
Get statistics about queue usage.
Definition at line 239 of file adaptive_job_queue.cpp.
References current_mode_, mode_start_time_, mutex, stats_, and stats_mutex_.
Referenced by performance_monitoring_example(), and web_server_simulation().

|
nodiscard |
Checks if the queue is stopped.
Definition at line 179 of file adaptive_job_queue.cpp.
References stopped_.
|
private |
Definition at line 330 of file adaptive_job_queue.cpp.
References current_mode_, lockfree_queue_, migration_mutex_, mode_start_time_, kcenon::thread::adaptive_job_queue::stats::mode_switches, mutex, mutex_queue_, stats_, stats_mutex_, update_mode_time(), and kcenon::thread::result< T >::value().
Referenced by kcenon::thread::adaptive_job_queue::accuracy_guard::accuracy_guard().


|
delete |
|
delete |
|
nodiscard |
Request temporary accuracy mode.
Definition at line 259 of file adaptive_job_queue.cpp.
|
overridevirtual |
Schedule a job (delegates to current queue)
| work | Job to schedule |
Implements kcenon::thread::scheduler_interface.
Definition at line 48 of file adaptive_job_queue.cpp.
|
nodiscard |
Returns the current number of jobs in the queue.
Definition at line 150 of file adaptive_job_queue.cpp.
References current_mode_, lockfree_queue_, mutex, and mutex_queue_.
| auto kcenon::thread::adaptive_job_queue::stop | ( | ) | -> void |
Signals the queue to stop.
Definition at line 174 of file adaptive_job_queue.cpp.
Referenced by ~adaptive_job_queue().

| auto kcenon::thread::adaptive_job_queue::switch_mode | ( | mode | m | ) | -> common::VoidResult |
Manually switch mode (only if policy is manual)
| m | Target mode to switch to |
Definition at line 225 of file adaptive_job_queue.cpp.
References kcenon::thread::invalid_argument.
|
nodiscard |
Tries to dequeue a job without blocking.
Definition at line 113 of file adaptive_job_queue.cpp.
References kcenon::thread::result< T >::is_ok(), kcenon::thread::queue_empty, and kcenon::thread::queue_stopped.

|
private |
Definition at line 376 of file adaptive_job_queue.cpp.
References current_mode_, mode_start_time_, mutex, stats_, stats_mutex_, kcenon::thread::adaptive_job_queue::stats::time_in_lockfree_ms, and kcenon::thread::adaptive_job_queue::stats::time_in_mutex_ms.
Referenced by migrate_to_mode(), and ~adaptive_job_queue().

|
private |
Definition at line 324 of file adaptive_job_queue.h.
Referenced by kcenon::thread::adaptive_job_queue::accuracy_guard::accuracy_guard().
|
private |
Definition at line 313 of file adaptive_job_queue.h.
Referenced by adaptive_job_queue(), current_mode(), get_capabilities(), get_stats(), migrate_to_mode(), size(), and update_mode_time().
|
private |
Definition at line 318 of file adaptive_job_queue.h.
Referenced by empty(), migrate_to_mode(), and size().
|
mutableprivate |
Definition at line 321 of file adaptive_job_queue.h.
Referenced by migrate_to_mode().
|
private |
Definition at line 329 of file adaptive_job_queue.h.
Referenced by get_stats(), migrate_to_mode(), and update_mode_time().
|
private |
Definition at line 317 of file adaptive_job_queue.h.
Referenced by empty(), migrate_to_mode(), and size().
|
private |
Definition at line 312 of file adaptive_job_queue.h.
Referenced by adaptive_job_queue(), and current_policy().
|
private |
Definition at line 328 of file adaptive_job_queue.h.
Referenced by determine_mode_for_balanced(), get_stats(), migrate_to_mode(), and update_mode_time().
|
mutableprivate |
Definition at line 327 of file adaptive_job_queue.h.
Referenced by determine_mode_for_balanced(), get_stats(), migrate_to_mode(), and update_mode_time().
|
private |