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

Synchronization policy using mutex and condition variable. More...

#include <sync_policies.h>

Collaboration diagram for kcenon::thread::policies::mutex_sync_policy:
Collaboration graph

Public Types

using policy_tag = sync_policy_tag
 

Public Member Functions

 mutex_sync_policy ()
 Construct mutex sync policy.
 
 ~mutex_sync_policy ()=default
 Destructor.
 
 mutex_sync_policy (const mutex_sync_policy &)=delete
 
mutex_sync_policyoperator= (const mutex_sync_policy &)=delete
 
 mutex_sync_policy (mutex_sync_policy &&)=delete
 
mutex_sync_policyoperator= (mutex_sync_policy &&)=delete
 
auto enqueue (std::unique_ptr< job > &&value) -> common::VoidResult
 Enqueue a job.
 
auto dequeue () -> common::Result< std::unique_ptr< job > >
 Dequeue a job (blocking)
 
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 (exact)
 
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 set_notify (bool notify) -> void
 Set notify flag.
 

Static Public Member Functions

static constexpr auto get_capabilities () -> queue_capabilities
 Queue capabilities for mutex sync policy.
 

Private Attributes

std::mutex mutex_
 
std::condition_variable condition_
 
std::deque< std::unique_ptr< job > > queue_
 
std::atomic< bool > notify_
 
std::atomic< bool > stop_
 

Detailed Description

Synchronization policy using mutex and condition variable.

Provides exact size/empty operations with full blocking support. Suitable for scenarios requiring accurate queue state or blocking waits.

Thread Safety

  • All operations are thread-safe using mutex protection
  • Supports blocking dequeue with condition variable

Performance Characteristics

  • Enqueue: O(1), may block on contention
  • Dequeue: O(1), may block on contention or empty queue

Definition at line 47 of file sync_policies.h.

Member Typedef Documentation

◆ policy_tag

Constructor & Destructor Documentation

◆ mutex_sync_policy() [1/3]

kcenon::thread::policies::mutex_sync_policy::mutex_sync_policy ( )
inline

Construct mutex sync policy.

Definition at line 69 of file sync_policies.h.

◆ ~mutex_sync_policy()

kcenon::thread::policies::mutex_sync_policy::~mutex_sync_policy ( )
default

Destructor.

◆ mutex_sync_policy() [2/3]

kcenon::thread::policies::mutex_sync_policy::mutex_sync_policy ( const mutex_sync_policy & )
delete

◆ mutex_sync_policy() [3/3]

kcenon::thread::policies::mutex_sync_policy::mutex_sync_policy ( mutex_sync_policy && )
delete

Member Function Documentation

◆ clear()

auto kcenon::thread::policies::mutex_sync_policy::clear ( ) -> void
inline

Clear all jobs from queue.

Definition at line 159 of file sync_policies.h.

159 {
160 std::lock_guard<std::mutex> lock(mutex_);
161 queue_.clear();
162 }
std::deque< std::unique_ptr< job > > queue_

References mutex_, and queue_.

◆ dequeue()

auto kcenon::thread::policies::mutex_sync_policy::dequeue ( ) -> common::Result<std::unique_ptr<job>>
inlinenodiscard

Dequeue a job (blocking)

Returns
Result containing the job or error

Definition at line 106 of file sync_policies.h.

106 {
107 std::unique_lock<std::mutex> lock(mutex_);
108
109 condition_.wait(lock, [this] {
110 return !queue_.empty() || stop_.load(std::memory_order_relaxed);
111 });
112
113 if (queue_.empty()) {
114 return common::error_info{-121, "queue is stopped or empty", "thread_system"};
115 }
116
117 auto value = std::move(queue_.front());
118 queue_.pop_front();
119 return value;
120 }

References condition_, mutex_, queue_, and stop_.

◆ empty()

auto kcenon::thread::policies::mutex_sync_policy::empty ( ) const -> bool
inlinenodiscard

Check if queue is empty.

Returns
true if empty, false otherwise

Definition at line 142 of file sync_policies.h.

142 {
143 std::lock_guard<std::mutex> lock(mutex_);
144 return queue_.empty();
145 }

References mutex_, and queue_.

◆ enqueue()

auto kcenon::thread::policies::mutex_sync_policy::enqueue ( std::unique_ptr< job > && value) -> common::VoidResult
inlinenodiscard

Enqueue a job.

Parameters
valueJob to enqueue
Returns
VoidResult indicating success or error

Definition at line 87 of file sync_policies.h.

87 {
88 if (!value) {
89 return common::error_info{-105, "cannot enqueue null job", "thread_system"};
90 }
91
92 std::lock_guard<std::mutex> lock(mutex_);
93 queue_.push_back(std::move(value));
94
95 if (notify_.load(std::memory_order_relaxed)) {
96 condition_.notify_one();
97 }
98
99 return common::ok();
100 }

References condition_, mutex_, notify_, and queue_.

◆ get_capabilities()

static constexpr auto kcenon::thread::policies::mutex_sync_policy::get_capabilities ( ) -> queue_capabilities
inlinestaticnodiscardconstexpr

Queue capabilities for mutex sync policy.

Definition at line 54 of file sync_policies.h.

54 {
55 return queue_capabilities{
56 .exact_size = true,
57 .atomic_empty_check = true,
58 .lock_free = false,
59 .wait_free = false,
60 .supports_batch = true,
61 .supports_blocking_wait = true,
62 .supports_stop = true
63 };
64 }

Referenced by kcenon::thread::policies::adaptive_sync_policy::get_capabilities().

Here is the caller graph for this function:

◆ is_stopped()

auto kcenon::thread::policies::mutex_sync_policy::is_stopped ( ) const -> bool
inlinenodiscard

Check if queue is stopped.

Returns
true if stopped, false otherwise

Definition at line 176 of file sync_policies.h.

176 {
177 return stop_.load(std::memory_order_acquire);
178 }

References stop_.

◆ operator=() [1/2]

mutex_sync_policy & kcenon::thread::policies::mutex_sync_policy::operator= ( const mutex_sync_policy & )
delete

◆ operator=() [2/2]

mutex_sync_policy & kcenon::thread::policies::mutex_sync_policy::operator= ( mutex_sync_policy && )
delete

◆ set_notify()

auto kcenon::thread::policies::mutex_sync_policy::set_notify ( bool notify) -> void
inline

Set notify flag.

Parameters
notifyWhether to notify on enqueue

Definition at line 184 of file sync_policies.h.

184 {
185 notify_.store(notify, std::memory_order_relaxed);
186 }

References notify_.

◆ size()

auto kcenon::thread::policies::mutex_sync_policy::size ( ) const -> std::size_t
inlinenodiscard

Get queue size (exact)

Returns
Number of jobs in queue

Definition at line 151 of file sync_policies.h.

151 {
152 std::lock_guard<std::mutex> lock(mutex_);
153 return queue_.size();
154 }

References mutex_, and queue_.

◆ stop()

auto kcenon::thread::policies::mutex_sync_policy::stop ( ) -> void
inline

Stop the queue.

Definition at line 167 of file sync_policies.h.

167 {
168 stop_.store(true, std::memory_order_release);
169 condition_.notify_all();
170 }

References condition_, and stop_.

◆ try_dequeue()

auto kcenon::thread::policies::mutex_sync_policy::try_dequeue ( ) -> common::Result<std::unique_ptr<job>>
inlinenodiscard

Try to dequeue a job (non-blocking)

Returns
Result containing the job or error

Definition at line 126 of file sync_policies.h.

126 {
127 std::lock_guard<std::mutex> lock(mutex_);
128
129 if (queue_.empty()) {
130 return common::error_info{-121, "queue is empty", "thread_system"};
131 }
132
133 auto value = std::move(queue_.front());
134 queue_.pop_front();
135 return value;
136 }

References mutex_, and queue_.

Member Data Documentation

◆ condition_

std::condition_variable kcenon::thread::policies::mutex_sync_policy::condition_
private

Definition at line 190 of file sync_policies.h.

Referenced by dequeue(), enqueue(), and stop().

◆ mutex_

std::mutex kcenon::thread::policies::mutex_sync_policy::mutex_
mutableprivate

Definition at line 189 of file sync_policies.h.

Referenced by clear(), dequeue(), empty(), enqueue(), size(), and try_dequeue().

◆ notify_

std::atomic<bool> kcenon::thread::policies::mutex_sync_policy::notify_
private

Definition at line 192 of file sync_policies.h.

Referenced by enqueue(), and set_notify().

◆ queue_

std::deque<std::unique_ptr<job> > kcenon::thread::policies::mutex_sync_policy::queue_
private

Definition at line 191 of file sync_policies.h.

Referenced by clear(), dequeue(), empty(), enqueue(), size(), and try_dequeue().

◆ stop_

std::atomic<bool> kcenon::thread::policies::mutex_sync_policy::stop_
private

Definition at line 193 of file sync_policies.h.

Referenced by dequeue(), is_stopped(), and stop().


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