65#ifdef REALM_DEFAULT_MUTEX
66 typedef REALM_DEFAULT_MUTEX
Mutex;
82 MutexChecker(
const char *_name,
void *_object = 0,
int _limit = 1);
132 static const long long DOORBELL_SLEEP_IMMEDIATE = 0;
133 static const long long DOORBELL_SLEEP_NEVER = -1;
134 static const long long DOORBELL_SLEEP_DEFAULT = 10000;
159 static const uint32_t STATE_IDLE = 0;
160 static const uint32_t STATE_PENDING_AWAKE = 2;
161 static const uint32_t STATE_PENDING_ASLEEP = 4;
162 static const uint32_t STATE_PENDING_PREWAKE = 6;
163 static const uint32_t STATE_SATISFIED_BIT = 1;
164 static const unsigned STATE_SATISFIED_VAL_SHIFT = 1;
172#ifdef REALM_ENABLE_STARVATION_CHECKS
174 int starvation_count;
177 void increase_starvation_count(
int to_add,
void *db_list);
292 alignas(8) uint64_t placeholder[8];
380 alignas(8) uint64_t placeholder[8];
383 template <
typename LT = Mutex>
464#include "realm/mutex.inl"
bool held
Definition mutex.h:394
LT & mutex
Definition mutex.h:393
atomic< uint64_t > state
Definition mutex.h:322
uint64_t attempt_enter(uint64_t work_units, uint64_t &tstate)
uint64_t attempt_exit(uint64_t &tstate)
void notify_newest(unsigned count, bool prefer_spinning)
Doorbell * extract_newest(bool prefer_spinning, bool allow_extra)
Doorbell * extract_oldest(bool prefer_spinning, bool allow_extra)
void notify_oldest(unsigned count, bool prefer_spinning)
bool add_doorbell(Doorbell *db)
atomic< uintptr_t > head_or_count
Definition mutex.h:216
atomic< uint32_t > state
Definition mutex.h:165
Doorbell * next_doorbell
Definition mutex.h:181
uintptr_t owner_tid
Definition mutex.h:171
void set_sleep_timeout(long long timeout_in_ns)
long long sleep_timeout
Definition mutex.h:167
long long next_sleep_time
Definition mutex.h:168
void notify(uint32_t data)
static Doorbell * get_thread_doorbell()
DoorbellList db_list
Definition mutex.h:356
FIFOMutex & mutex
Definition mutex.h:346
FIFOCondVar(FIFOMutex &_mutex)
unsigned num_waiters
Definition mutex.h:355
DoorbellList db_list
Definition mutex.h:270
atomic< uint32_t > state
Definition mutex.h:269
FIFOCondVar CondVar
Definition mutex.h:252
bool timedwait(long long max_nsec)
KernelMutex & mutex
Definition mutex.h:364
KernelCondVar(KernelMutex &_mutex)
KernelCondVar CondVar
Definition mutex.h:278
MutexChecker & checker
Definition mutex.h:95
const char * name
Definition mutex.h:96
CheckedScope(MutexChecker &_checker, const char *_name, void *_object=0)
void * object
Definition mutex.h:97
atomic< int > cur_count
Definition mutex.h:111
int limit
Definition mutex.h:110
void lock_fail(int actval, CheckedScope *cs)
const char * name
Definition mutex.h:108
bool trylock(CheckedScope *cs=0)
void unlock_fail(int actval, CheckedScope *cs)
void * object
Definition mutex.h:109
void lock(CheckedScope *cs=0)
MutexChecker(const char *_name, void *_object=0, int _limit=1)
void unlock(CheckedScope *cs=0)
RWLock & operator=(const RWLock &)=delete
RWLock(const RWLock &)=delete
AutoLock< Reader > AutoReaderLock
Definition mutex.h:442
Writer writer
Definition mutex.h:449
AutoLock< Writer > AutoWriterLock
Definition mutex.h:441
RWLock & operator=(RWLock &&)=delete
uint64_t placeholder[8]
Definition mutex.h:459
Reader reader
Definition mutex.h:450
DoorbellList db_list
Definition mutex.h:339
UnfairCondVar(UnfairMutex &_mutex)
UnfairMutex & mutex
Definition mutex.h:329
unsigned num_waiters
Definition mutex.h:338
UnfairCondVar CondVar
Definition mutex.h:227
atomic< uint32_t > state
Definition mutex.h:244
DoorbellList db_list
Definition mutex.h:245
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
Definition activemsg.h:38
UnfairMutex Mutex
Definition mutex.h:68
RWLock & rwlock
Definition mutex.h:438
void lock()
Definition mutex.h:433
void trylock()
Definition mutex.h:434
Reader(RWLock &_rwlock)
Definition mutex.h:430
void unlock()
Definition mutex.h:435
RWLock & rwlock
Definition mutex.h:426
void unlock()
Definition mutex.h:423
void trylock()
Definition mutex.h:422
Writer(RWLock &_rwlock)
Definition mutex.h:418
void lock()
Definition mutex.h:421