LLVM OpenMP 22.0.0git
kmp_flag_atomic< PtrType, FlagType, Sleepable > Class Template Reference

Base class for wait/release atomic flag. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/openmp/runtime/src/kmp_wait_release.h"

Inheritance diagram for kmp_flag_atomic< PtrType, FlagType, Sleepable >:
[legend]

Public Types

typedef flag_traits< FlagType > traits_type
typedef PtrType flag_t
Public Types inherited from kmp_flag< FlagType >
typedef flag_traits< FlagType > traits_type

Public Member Functions

 kmp_flag_atomic (std::atomic< PtrType > *p)
 kmp_flag_atomic (std::atomic< PtrType > *p, kmp_info_t *thr)
 kmp_flag_atomic (std::atomic< PtrType > *p, PtrType c)
 kmp_flag_atomic (std::atomic< PtrType > *p, PtrType c, std::atomic< bool > *sloc)
std::atomic< PtrType > * get ()
voidget_void_p ()
void set (std::atomic< PtrType > *new_loc)
PtrType load ()
void store (PtrType val)
bool done_check ()
bool done_check_val (PtrType old_loc)
bool notdone_check ()
void internal_release ()
PtrType set_sleeping ()
void unset_sleeping ()
bool is_sleeping_val (PtrType old_loc)
bool is_sleeping ()
 Test whether there are threads sleeping on the flag.
bool is_any_sleeping ()
kmp_uint8get_stolen ()
Public Member Functions inherited from kmp_flag< FlagType >
 kmp_flag ()
 kmp_flag (int nwaiters)
 kmp_flag (std::atomic< bool > *sloc)
flag_type get_type ()
kmp_info_tget_waiter (kmp_uint32 i)
 param i in index into waiting_threads
kmp_uint32 get_num_waiters ()
void set_waiter (kmp_info_t *thr)
enum barrier_type get_bt ()

Protected Attributes

std::atomic< PtrType > * loc
 Pointer to flag location to wait on.
PtrType checker = (PtrType)0
 Flag==checker means it has been released.
Protected Attributes inherited from kmp_flag< FlagType >
flag_properties t
 "Type" of the flag in loc
kmp_info_twaiting_threads [1] = {nullptr}
kmp_uint32 num_waiting_threads
 Num threads sleeping on this thread.
std::atomic< bool > * sleepLoc

Detailed Description

template<typename PtrType, flag_type FlagType, bool Sleepable>
class kmp_flag_atomic< PtrType, FlagType, Sleepable >

Base class for wait/release atomic flag.

Definition at line 235 of file kmp_wait_release.h.

Member Typedef Documentation

◆ flag_t

template<typename PtrType, flag_type FlagType, bool Sleepable>
typedef PtrType kmp_flag_atomic< PtrType, FlagType, Sleepable >::flag_t

Definition at line 241 of file kmp_wait_release.h.

◆ traits_type

template<typename PtrType, flag_type FlagType, bool Sleepable>
typedef flag_traits<FlagType> kmp_flag_atomic< PtrType, FlagType, Sleepable >::traits_type

Definition at line 240 of file kmp_wait_release.h.

Constructor & Destructor Documentation

◆ kmp_flag_atomic() [1/4]

template<typename PtrType, flag_type FlagType, bool Sleepable>
kmp_flag_atomic< PtrType, FlagType, Sleepable >::kmp_flag_atomic ( std::atomic< PtrType > * p)
inline

Definition at line 242 of file kmp_wait_release.h.

References kmp_flag< FlagType >::kmp_flag(), loc, and p.

◆ kmp_flag_atomic() [2/4]

template<typename PtrType, flag_type FlagType, bool Sleepable>
kmp_flag_atomic< PtrType, FlagType, Sleepable >::kmp_flag_atomic ( std::atomic< PtrType > * p,
kmp_info_t * thr )
inline

Definition at line 243 of file kmp_wait_release.h.

References kmp_flag< FlagType >::kmp_flag(), loc, and p.

◆ kmp_flag_atomic() [3/4]

template<typename PtrType, flag_type FlagType, bool Sleepable>
kmp_flag_atomic< PtrType, FlagType, Sleepable >::kmp_flag_atomic ( std::atomic< PtrType > * p,
PtrType c )
inline

Definition at line 247 of file kmp_wait_release.h.

References checker, kmp_flag< FlagType >::kmp_flag(), loc, and p.

◆ kmp_flag_atomic() [4/4]

template<typename PtrType, flag_type FlagType, bool Sleepable>
kmp_flag_atomic< PtrType, FlagType, Sleepable >::kmp_flag_atomic ( std::atomic< PtrType > * p,
PtrType c,
std::atomic< bool > * sloc )
inline

Definition at line 249 of file kmp_wait_release.h.

References checker, kmp_flag< FlagType >::kmp_flag(), loc, and p.

Member Function Documentation

◆ done_check()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::done_check ( )
inline
Returns
true if the flag object has been released.

Definition at line 262 of file kmp_wait_release.h.

References checker, KMP_BARRIER_SLEEP_STATE, and load().

◆ done_check_val()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::done_check_val ( PtrType old_loc)
inline
Parameters
old_locin old value of flag
Returns
true if the flag's old value indicates it was released.

Definition at line 270 of file kmp_wait_release.h.

References checker.

◆ get()

template<typename PtrType, flag_type FlagType, bool Sleepable>
std::atomic< PtrType > * kmp_flag_atomic< PtrType, FlagType, Sleepable >::get ( )
inline
Returns
the pointer to the actual flag

Definition at line 252 of file kmp_wait_release.h.

References loc.

Referenced by internal_release(), set_sleeping(), and unset_sleeping().

◆ get_stolen()

template<typename PtrType, flag_type FlagType, bool Sleepable>
kmp_uint8 * kmp_flag_atomic< PtrType, FlagType, Sleepable >::get_stolen ( )
inline

Definition at line 318 of file kmp_wait_release.h.

◆ get_void_p()

template<typename PtrType, flag_type FlagType, bool Sleepable>
void * kmp_flag_atomic< PtrType, FlagType, Sleepable >::get_void_p ( )
inline
Returns
void* pointer to the actual flag

Definition at line 254 of file kmp_wait_release.h.

References loc, and RCAST.

◆ internal_release()

template<typename PtrType, flag_type FlagType, bool Sleepable>
void kmp_flag_atomic< PtrType, FlagType, Sleepable >::internal_release ( )
inline
Returns
Actual flag value before release was applied. Trigger all waiting threads to run by modifying flag to release state.

Definition at line 279 of file kmp_wait_release.h.

References get(), and KMP_ATOMIC_ADD.

◆ is_any_sleeping()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::is_any_sleeping ( )
inline

Definition at line 313 of file kmp_wait_release.h.

References is_sleeping_val(), and load().

◆ is_sleeping()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::is_sleeping ( )
inline

Test whether there are threads sleeping on the flag.

Definition at line 308 of file kmp_wait_release.h.

References is_sleeping_val(), and load().

◆ is_sleeping_val()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::is_sleeping_val ( PtrType old_loc)
inline
Parameters
old_locin old value of flag Test whether there are threads sleeping on flag's old value in old_loc.

Definition at line 302 of file kmp_wait_release.h.

References KMP_BARRIER_SLEEP_STATE.

Referenced by is_any_sleeping(), and is_sleeping().

◆ load()

template<typename PtrType, flag_type FlagType, bool Sleepable>
PtrType kmp_flag_atomic< PtrType, FlagType, Sleepable >::load ( )
inline
Returns
flag value

Definition at line 258 of file kmp_wait_release.h.

References loc.

Referenced by done_check(), is_any_sleeping(), is_sleeping(), and notdone_check().

◆ notdone_check()

template<typename PtrType, flag_type FlagType, bool Sleepable>
bool kmp_flag_atomic< PtrType, FlagType, Sleepable >::notdone_check ( )
inline
Returns
true if the flag object is not yet released. Used in __kmp_wait_template like:
while (flag.notdone_check()) { pause(); }
volatile int flag

Definition at line 276 of file kmp_wait_release.h.

References load().

◆ set()

template<typename PtrType, flag_type FlagType, bool Sleepable>
void kmp_flag_atomic< PtrType, FlagType, Sleepable >::set ( std::atomic< PtrType > * new_loc)
inline
Parameters
new_locin set loc to point at new_loc

Definition at line 256 of file kmp_wait_release.h.

References loc.

◆ set_sleeping()

template<typename PtrType, flag_type FlagType, bool Sleepable>
PtrType kmp_flag_atomic< PtrType, FlagType, Sleepable >::set_sleeping ( )
inline
Returns
Actual flag value before sleep bit(s) set. Notes that there is at least one thread sleeping on the flag by setting sleep bit(s).

Definition at line 283 of file kmp_wait_release.h.

References get(), KMP_ATOMIC_OR, and KMP_BARRIER_SLEEP_STATE.

◆ store()

template<typename PtrType, flag_type FlagType, bool Sleepable>
void kmp_flag_atomic< PtrType, FlagType, Sleepable >::store ( PtrType val)
inline
Parameters
valthe new flag value to be stored

Definition at line 260 of file kmp_wait_release.h.

References loc, and val.

◆ unset_sleeping()

template<typename PtrType, flag_type FlagType, bool Sleepable>
void kmp_flag_atomic< PtrType, FlagType, Sleepable >::unset_sleeping ( )
inline
Returns
Actual flag value before sleep bit(s) cleared. Notes that there are no longer threads sleeping on the flag by clearing sleep bit(s).

Definition at line 293 of file kmp_wait_release.h.

References get(), KMP_ATOMIC_AND, and KMP_BARRIER_SLEEP_STATE.

Member Data Documentation

◆ checker

template<typename PtrType, flag_type FlagType, bool Sleepable>
PtrType kmp_flag_atomic< PtrType, FlagType, Sleepable >::checker = (PtrType)0
protected

Flag==checker means it has been released.

Definition at line 238 of file kmp_wait_release.h.

Referenced by done_check(), done_check_val(), kmp_flag_atomic(), and kmp_flag_atomic().

◆ loc

template<typename PtrType, flag_type FlagType, bool Sleepable>
std::atomic<PtrType>* kmp_flag_atomic< PtrType, FlagType, Sleepable >::loc
protected

Pointer to flag location to wait on.

Definition at line 237 of file kmp_wait_release.h.

Referenced by get(), get_void_p(), kmp_flag_atomic(), kmp_flag_atomic(), kmp_flag_atomic(), kmp_flag_atomic(), load(), set(), and store().


The documentation for this class was generated from the following file: