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

◆ pop_mpsc()

template<typename T , typename StoragePolicy , typename ConcurrencyPolicy = SingleThreadedPolicy, typename AccessPattern = QueueAccess>
std::optional< T > MayaFlux::Memory::RingBuffer< T, StoragePolicy, ConcurrencyPolicy, AccessPattern >::pop_mpsc ( )
inlineprivatenoexcept

Definition at line 1217 of file RingBuffer.hpp.

1218 {
1219 const size_t cap = m_storage.capacity();
1220 const size_t slot = m_state.read_index.load(std::memory_order_relaxed);
1221
1222 if (!m_state.ready_flags[slot].load(std::memory_order_acquire))
1223 return std::nullopt;
1224
1225 T value = m_storage.buffer[slot];
1226
1227 m_state.ready_flags[slot].store(false, std::memory_order_release);
1228 m_state.read_index.store(State::increment(slot, cap), std::memory_order_release);
1229
1230 return value;
1231 }
float value

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

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

+ Here is the caller graph for this function: