113 auto schedule(std::unique_ptr<job>&& work) -> common::VoidResult
override;
119 auto get_next_job() -> common::Result<std::unique_ptr<job>>
override;
130 [[nodiscard]]
auto enqueue(std::unique_ptr<job>&& j) -> common::VoidResult;
148 template<
typename JobType,
typename = std::enable_if_t<std::is_base_of_v<job, JobType>>>
149 [[nodiscard]]
auto enqueue(std::unique_ptr<JobType>&& value) -> common::VoidResult
151 return enqueue(std::unique_ptr<job>(std::move(value)));
158 [[nodiscard]]
auto dequeue() -> common::Result<std::unique_ptr<job>>;
164 [[nodiscard]]
auto try_dequeue() -> common::Result<std::unique_ptr<job>>;
171 [[nodiscard]]
auto empty() const ->
bool;
178 [[nodiscard]] auto
size() const ->
std::
size_t;
183 auto
clear() ->
void;
194 [[nodiscard]] auto
is_stopped() const ->
bool;
237 uint64_t mode_switches{0};
238 uint64_t time_in_mutex_ms{0};
239 uint64_t time_in_lockfree_ms{0};
240 uint64_t enqueue_count{0};
241 uint64_t dequeue_count{0};
248 [[nodiscard]]
auto get_stats() const -> stats;
254 class accuracy_guard;
RAII guard that temporarily switches to accuracy mode.
accuracy_guard & operator=(accuracy_guard &&)=delete
adaptive_job_queue * queue_
accuracy_guard & operator=(const accuracy_guard &)=delete
accuracy_guard(const accuracy_guard &)=delete
Adaptive queue that switches between mutex and lock-free modes.
auto stop() -> void
Signals the queue to stop.
std::atomic< int > accuracy_guard_count_
auto require_accuracy() -> accuracy_guard
Request temporary accuracy mode.
auto current_policy() const -> policy
Get current policy.
auto empty() const -> bool
Checks if the queue is empty.
auto get_next_job() -> common::Result< std::unique_ptr< job > > override
Get next job (delegates to current queue)
auto switch_mode(mode m) -> common::VoidResult
Manually switch mode (only if policy is manual)
auto dequeue() -> common::Result< std::unique_ptr< job > >
Dequeues a job from the current active queue.
std::shared_ptr< job_queue > mutex_queue_
auto enqueue(std::unique_ptr< job > &&j) -> common::VoidResult
Enqueues a job into the current active queue.
adaptive_job_queue(policy p=policy::balanced)
Create adaptive queue with specified policy.
void migrate_to_mode(mode target)
auto enqueue(std::unique_ptr< JobType > &&value) -> common::VoidResult
Type-safe enqueue for job subclasses.
std::chrono::steady_clock::time_point mode_start_time_
auto determine_mode_for_balanced() const -> mode
~adaptive_job_queue()
Destructor - cleans up both queue implementations.
std::atomic< mode > current_mode_
auto schedule(std::unique_ptr< job > &&work) -> common::VoidResult override
Schedule a job (delegates to current queue)
adaptive_job_queue(adaptive_job_queue &&)=delete
std::mutex migration_mutex_
adaptive_job_queue & operator=(adaptive_job_queue &&)=delete
std::unique_ptr< detail::lockfree_job_queue > lockfree_queue_
auto try_dequeue() -> common::Result< std::unique_ptr< job > >
Tries to dequeue a job without blocking.
auto clear() -> void
Clears all jobs from the queue.
auto get_stats() const -> stats
Get statistics about queue usage.
@ mutex
Using job_queue (accuracy mode)
@ lock_free
Using lockfree_job_queue (performance mode)
adaptive_job_queue & operator=(const adaptive_job_queue &)=delete
auto get_capabilities() const -> queue_capabilities override
Returns capabilities based on current mode.
std::atomic< bool > stopped_
auto size() const -> std::size_t
Returns the current number of jobs in the queue.
adaptive_job_queue(const adaptive_job_queue &)=delete
auto is_stopped() const -> bool
Checks if the queue is stopped.
auto current_mode() const -> mode
Get current operating mode.
@ manual
User controls mode.
@ performance_first
Always use lock-free mode.
@ balanced
Auto-switch based on usage.
@ accuracy_first
Always use mutex mode.
Mixin interface for queue capability introspection.
Scheduler interface for queuing and retrieving jobs.
Thread-safe FIFO job queue with optional bounded size.
Lock-free MPMC job queue using Michael-Scott algorithm with hazard pointers.
Core threading foundation of the thread system library.
Mixin interface for queue capability introspection.
Statistics about mode switching.
Runtime-queryable queue capabilities descriptor.