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

◆ signal()

template<typename T >
void MayaFlux::Vruta::BroadcastSource< T >::signal ( const T &  value)
inline

Deliver a value to the waiting coroutine, or store it as pending.

Atomically takes the waiter slot. If a waiter is present, delivers directly and resumes. Otherwise stores the value for the next await_ready() or post-registration check.

Safe to call from any thread.

Parameters
valueValue to deliver.

Definition at line 63 of file BroadcastSource.hpp.

64 {
65 auto* w = m_waiter.exchange(nullptr, std::memory_order_acq_rel);
66 if (w) {
67 w->deliver(value);
68 } else {
69 m_pending_value = value;
70 m_pending_flag.store(true, std::memory_order_release);
71 }
72 }
std::atomic< Kriya::BroadcastAwaiter< T > * > m_waiter
T m_pending_value
Pending value written by signal() when no waiter is registered.

References MayaFlux::Vruta::BroadcastSource< T >::m_pending_flag, MayaFlux::Vruta::BroadcastSource< T >::m_pending_value, and MayaFlux::Vruta::BroadcastSource< T >::m_waiter.