48 bool Invoke(uint32_t events, Handler&& handler)
noexcept
50 if ((events == 0U) || ((events & OWNER_BIT) != 0U))
55 uint32_t observed = state_.fetch_or(events, std::memory_order_release) | events;
57 while ((observed & OWNER_BIT) == 0U)
61 if ((observed & EVENT_MASK) == 0U)
66 const uint32_t desired = observed | OWNER_BIT;
67 if (state_.compare_exchange_weak(observed, desired, std::memory_order_acquire,
68 std::memory_order_relaxed))
74 if ((observed & OWNER_BIT) != 0U)
81 const uint32_t snapshot =
82 state_.exchange(OWNER_BIT, std::memory_order_acq_rel) & EVENT_MASK;
88 uint32_t expected = OWNER_BIT;
89 if (state_.compare_exchange_strong(expected, 0U, std::memory_order_release,
90 std::memory_order_acquire))