MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ push_lockfree()

template<typename T , typename StoragePolicy , typename ConcurrencyPolicy = SingleThreadedPolicy, typename AccessPattern = QueueAccess>
bool MayaFlux::Memory::RingBuffer< T, StoragePolicy, ConcurrencyPolicy, AccessPattern >::push_lockfree ( const T &  value)
inlineprivatenoexcept

Definition at line 1029 of file RingBuffer.hpp.

1030 {
1031 const size_t cap = m_storage.capacity();
1032 auto write = m_state.write_index.load(std::memory_order_relaxed);
1033 auto next_write = State::increment(write, cap);
1034
1035 if (next_write == m_state.read_index.load(std::memory_order_acquire)) {
1036 return false;
1037 }
1038
1039 m_storage.buffer[write] = value;
1040 m_state.write_index.store(next_write, std::memory_order_release);
1041
1042 return true;
1043 }

References MayaFlux::Memory::RingBuffer< T, StoragePolicy, ConcurrencyPolicy, AccessPattern >::m_state, and MayaFlux::Memory::RingBuffer< T, StoragePolicy, ConcurrencyPolicy, AccessPattern >::m_storage.

Referenced by MayaFlux::Memory::RingBuffer< T, StoragePolicy, ConcurrencyPolicy, AccessPattern >::push().

+ Here is the caller graph for this function: