2
3
6
7
8
9
10
11
13#include <so_5/disp/mpmc_queue_traits/pub.hpp>
15#include <so_5/spinlocks.hpp>
18#include <condition_variable>
29using spinlock_t =
so_5::default_spinlock_t;
35
36
37
38
39
59 spinlock_t & spinlock,
61 std::chrono::high_resolution_clock::duration waiting_time )
69 using hrc = std::chrono::high_resolution_clock;
72
73
74
88 std::this_thread::yield();
95 while( stop_point > hrc::now() );
108 std::unique_lock< std::mutex > mutex_lock{
m_mutex };
123 std::lock_guard< std::mutex > mutex_lock{
m_mutex };
135
136
137
138
139
151 std::chrono::high_resolution_clock::duration waiting_time )
167 virtual condition_unique_ptr_t
170 return condition_unique_ptr_t{
184
185
186
187
188
189
214 std::unique_lock< std::mutex > mutex_lock{
m_mutex, std::adopt_lock };
218 mutex_lock.release();
234
235
236
237
238
239
261 virtual condition_unique_ptr_t
275 std::chrono::high_resolution_clock::duration waiting_time )
277 return [waiting_time] {
279 std::move(waiting_time)
} };
Impementation of condition object for the case of combined lock.
virtual void notify() noexcept override
Notification for waiting customer.
actual_cond_t(spinlock_t &spinlock, std::chrono::high_resolution_clock::duration waiting_time)
Initializing constructor.
virtual void wait() noexcept override
Waiting on condition.
std::mutex m_mutex
Personal mutex to be used with condition variable.
const std::chrono::high_resolution_clock::duration m_waiting_time
Max waiting time for busy waiting stage.
std::condition_variable m_condition
Condition variable for long-time waiting.
bool m_signaled
An indicator of notification for condition object.
spinlock_t & m_spinlock
Spinlock from parent lock object.
Actual implementation of combined lock object.
const std::chrono::high_resolution_clock::duration m_waiting_time
Max waiting time for busy waiting stage.
actual_lock_t(std::chrono::high_resolution_clock::duration waiting_time)
Initializing constructor.
spinlock_t m_spinlock
Common spinlock for locking of producers and consumers.
virtual condition_unique_ptr_t allocate_condition() override
Create condition object for another MPMC queue's customer.
virtual void unlock() noexcept override
Unlock object locked in exclusive mode.
virtual void lock() noexcept override
Lock object in exclusive mode.
An interface for somethine like condition variable for waiting on MPMC queue lock.
An interface for lock for MPMC queue.
Actual implementation of condition object for the case of simple locking on mutex and condition_varia...
virtual void notify() noexcept override
Notification for waiting customer.
virtual void wait() noexcept override
Waiting on condition.
std::condition_variable m_condition
Personal condition_variable object for condition object owner.
std::mutex & m_mutex
Common mutex from the parent lock.
actual_cond_t(std::mutex &mutex)
Initializing constructor.
bool m_signaled
An indicator of notification for condition object.
Actual implementation of lock object for simple locking on mutex and condition variables.
std::mutex m_mutex
Common mutex for all producers and consumers.
virtual void unlock() noexcept override
Unlock object locked in exclusive mode.
virtual void lock() noexcept override
Lock object in exclusive mode.
virtual condition_unique_ptr_t allocate_condition() override
Create condition object for another MPMC queue's customer.
void unlock()
Unlock object.
Implementation of combined lock for MPMC event queue.
Implementation of simple lock for MPMC event queue.
Various stuff related to MPMC event queue implementation and tuning.
SO_5_FUNC lock_factory_t combined_lock_factory(std::chrono::high_resolution_clock::duration waiting_time)
Factory for creation of combined queue lock with the specified waiting time.
SO_5_FUNC lock_factory_t simple_lock_factory()
Factory for creation of very simple implementation based on usage of mutex and condition_variable onl...
Private part of message limit implementation.