Lines Matching refs:do_once_state
252 enum class do_once_state { enum
268 void atomic_do_once( const F& initializer, std::atomic<do_once_state>& state ) { in atomic_do_once()
274 do_once_state expected_state; in atomic_do_once()
275 while ( state.load( std::memory_order_acquire ) != do_once_state::executed ) { in atomic_do_once()
276 if( state.load( std::memory_order_relaxed ) == do_once_state::uninitialized ) { in atomic_do_once()
277 expected_state = do_once_state::uninitialized; in atomic_do_once()
279 using enum_type = typename std::underlying_type<do_once_state>::type; in atomic_do_once()
280 …state).compare_exchange_strong( (enum_type&)expected_state, (enum_type)do_once_state::pending ) ) { in atomic_do_once()
282 if( state.compare_exchange_strong( expected_state, do_once_state::pending ) ) { in atomic_do_once()
288 spin_wait_while_eq( state, do_once_state::pending ); in atomic_do_once()
294 void run_initializer(const Functor& f, std::atomic<do_once_state>& state ) { in atomic_do_once()
296 state.store(do_once_state::executed, std::memory_order_release); in atomic_do_once()