void lock () { load_barrier(); bool expected = false; POMAGMA_ASSERT(m_flag.compare_exchange_strong(expected, true), "lock contention"); }
void acquire (const PipelineState & state) { if (state.load_stage() != stage_) { std::unique_lock<std::mutex> lock(mutex_); cond_variable_.wait(lock, [&](){ return state.load_stage() == stage_; }); } load_barrier(); }
void lock () { load_barrier(); }
void lock_shared () { load_barrier(); POMAGMA_ASSERT(++m_count > 0, "lock_shared contention"); }
void lock () { load_barrier(); POMAGMA_ASSERT(--m_count < 0, "lock contention"); }
SharedLock (AssertSharedMutex &) { load_barrier(); }
Lock (AssertMutex &) { load_barrier(); }