Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
kcenon::thread::adaptive_job_queue::accuracy_guard Class Reference

RAII guard that temporarily switches to accuracy mode. More...

#include <adaptive_job_queue.h>

Collaboration diagram for kcenon::thread::adaptive_job_queue::accuracy_guard:
Collaboration graph

Public Member Functions

 accuracy_guard (adaptive_job_queue &queue)
 Construct guard and switch queue to mutex mode.
 
 ~accuracy_guard ()
 Destructor - restores previous mode.
 
 accuracy_guard (accuracy_guard &&other) noexcept
 
accuracy_guardoperator= (accuracy_guard &&)=delete
 
 accuracy_guard (const accuracy_guard &)=delete
 
accuracy_guardoperator= (const accuracy_guard &)=delete
 

Private Attributes

adaptive_job_queuequeue_
 
mode previous_mode_
 
bool active_
 

Detailed Description

RAII guard that temporarily switches to accuracy mode.

Definition at line 283 of file adaptive_job_queue.h.

Constructor & Destructor Documentation

◆ accuracy_guard() [1/3]

kcenon::thread::adaptive_job_queue::accuracy_guard::accuracy_guard ( adaptive_job_queue & queue)
explicit

Construct guard and switch queue to mutex mode.

Parameters
queueReference to the adaptive queue

Definition at line 267 of file adaptive_job_queue.cpp.

268 : queue_(&queue)
269 , previous_mode_(queue.current_mode())
270 , active_(true) {
271
272 // Increment guard count
273 int prev_count = queue_->accuracy_guard_count_.fetch_add(1, std::memory_order_acq_rel);
274
275 // If this is the first guard and not already in mutex mode, switch
276 if (prev_count == 0 && previous_mode_ != mode::mutex) {
278 }
279}
@ mutex
Using job_queue (accuracy mode)

References kcenon::thread::adaptive_job_queue::accuracy_guard_count_, kcenon::thread::adaptive_job_queue::migrate_to_mode(), kcenon::thread::adaptive_job_queue::mutex, previous_mode_, and queue_.

Here is the call graph for this function:

◆ ~accuracy_guard()

kcenon::thread::adaptive_job_queue::accuracy_guard::~accuracy_guard ( )

Destructor - restores previous mode.

Definition at line 281 of file adaptive_job_queue.cpp.

281 {
282 if (!active_ || !queue_) {
283 return;
284 }
285
286 // Decrement guard count
287 int prev_count = queue_->accuracy_guard_count_.fetch_sub(1, std::memory_order_acq_rel);
288
289 // If this was the last guard and we should restore previous mode
290 if (prev_count == 1) {
291 // Restore based on policy
292 switch (queue_->policy_) {
294 // Stay in mutex mode
295 break;
298 break;
299 case policy::balanced:
300 // Let balanced policy decide
301 {
303 if (target != mode::mutex) {
304 queue_->migrate_to_mode(target);
305 }
306 }
307 break;
308 case policy::manual:
309 // Restore previous mode
312 }
313 break;
314 }
315 }
316}
@ lock_free
Using lockfree_job_queue (performance mode)
@ performance_first
Always use lock-free mode.
@ balanced
Auto-switch based on usage.

References kcenon::thread::adaptive_job_queue::accuracy_first, kcenon::thread::adaptive_job_queue::balanced, kcenon::thread::adaptive_job_queue::lock_free, kcenon::thread::adaptive_job_queue::manual, kcenon::thread::adaptive_job_queue::mutex, and kcenon::thread::adaptive_job_queue::performance_first.

◆ accuracy_guard() [2/3]

kcenon::thread::adaptive_job_queue::accuracy_guard::accuracy_guard ( accuracy_guard && other)
noexcept

Definition at line 318 of file adaptive_job_queue.cpp.

319 : queue_(other.queue_)
320 , previous_mode_(other.previous_mode_)
321 , active_(other.active_) {
322 other.active_ = false;
323 other.queue_ = nullptr;
324}

◆ accuracy_guard() [3/3]

kcenon::thread::adaptive_job_queue::accuracy_guard::accuracy_guard ( const accuracy_guard & )
delete

Member Function Documentation

◆ operator=() [1/2]

accuracy_guard & kcenon::thread::adaptive_job_queue::accuracy_guard::operator= ( accuracy_guard && )
delete

◆ operator=() [2/2]

accuracy_guard & kcenon::thread::adaptive_job_queue::accuracy_guard::operator= ( const accuracy_guard & )
delete

Member Data Documentation

◆ active_

bool kcenon::thread::adaptive_job_queue::accuracy_guard::active_
private

Definition at line 307 of file adaptive_job_queue.h.

◆ previous_mode_

mode kcenon::thread::adaptive_job_queue::accuracy_guard::previous_mode_
private

Definition at line 306 of file adaptive_job_queue.h.

Referenced by accuracy_guard().

◆ queue_

adaptive_job_queue* kcenon::thread::adaptive_job_queue::accuracy_guard::queue_
private

Definition at line 305 of file adaptive_job_queue.h.

Referenced by accuracy_guard().


The documentation for this class was generated from the following files: