#include <EventCount.h>
◆ EventCount() [1/2]
#define eigen_plain_assert(condition)
Definition: Assert.h:148
MaxSizeVector< Waiter > & waiters_
Definition: EventCount.h:236
std::atomic< uint64_t > state_
Definition: EventCount.h:235
static const uint64_t kStackMask
Definition: EventCount.h:171
static const uint64_t kWaiterBits
Definition: EventCount.h:170
References eigen_plain_assert, kWaiterBits, and Eigen::MaxSizeVector< T >::size().
◆ EventCount() [2/2]
Eigen::EventCount::EventCount |
( |
const EventCount & |
| ) |
|
|
delete |
◆ ~EventCount()
Eigen::EventCount::~EventCount |
( |
| ) |
|
|
inline |
◆ CancelWait()
void Eigen::EventCount::CancelWait |
( |
| ) |
|
|
inline |
121 if (
state_.compare_exchange_weak(state, newstate, std::memory_order_acq_rel))
return;
static const uint64_t kSignalInc
Definition: EventCount.h:177
static const uint64_t kWaiterMask
Definition: EventCount.h:173
static const uint64_t kWaiterInc
Definition: EventCount.h:174
static const uint64_t kWaiterShift
Definition: EventCount.h:172
static void CheckState(uint64_t state, bool waiter=false)
Definition: EventCount.h:201
static const uint64_t kSignalMask
Definition: EventCount.h:176
static const uint64_t kSignalShift
Definition: EventCount.h:175
std::uint64_t uint64_t
Definition: Meta.h:42
References CheckState(), kSignalInc, kSignalMask, kSignalShift, kWaiterInc, kWaiterMask, kWaiterShift, and state_.
Referenced by test_basic_eventcount(), test_stress_eventcount(), and Eigen::ThreadPoolTempl< Environment >::WaitForWork().
◆ CheckState()
static void Eigen::EventCount::CheckState |
( |
uint64_t |
state, |
|
|
bool |
waiter = false |
|
) |
| |
|
inlinestaticprivate |
202 static_assert(
kEpochBits >= 20,
"not enough bits to prevent ABA problem");
static const uint64_t kEpochBits
Definition: EventCount.h:179
References eigen_plain_assert, kEpochBits, kSignalMask, kSignalShift, kWaiterBits, kWaiterMask, and kWaiterShift.
Referenced by CancelWait(), CommitWait(), Notify(), and Prewait().
◆ CommitWait()
void Eigen::EventCount::CommitWait |
( |
Waiter * |
w | ) |
|
|
inline |
99 if (
state_.compare_exchange_weak(state, newstate, std::memory_order_acq_rel)) {
RowVector3d w
Definition: Matrix_resize_int.cpp:3
@ kNotSignaled
Definition: EventCount.h:188
static const uint64_t kEpochMask
Definition: EventCount.h:180
static const uint64_t kEpochInc
Definition: EventCount.h:181
void Park(Waiter *w)
Definition: EventCount.h:212
References CheckState(), eigen_plain_assert, kEpochInc, kEpochMask, Eigen::EventCount::Waiter::kNotSignaled, kSignalInc, kSignalMask, kStackMask, kWaiterInc, kWaiterMask, Park(), state_, w, and waiters_.
Referenced by test_basic_eventcount(), test_stress_eventcount(), and Eigen::ThreadPoolTempl< Environment >::WaitForWork().
◆ Notify()
void Eigen::EventCount::Notify |
( |
bool |
notifyAll | ) |
|
|
inline |
128 std::atomic_thread_fence(std::memory_order_seq_cst);
140 }
else if (signals < waiters) {
146 uint64_t next =
w->next.load(std::memory_order_relaxed);
150 if (
state_.compare_exchange_weak(state, newstate, std::memory_order_acq_rel)) {
151 if (!notifyAll && (signals < waiters))
return;
154 if (!notifyAll)
w->next.store(
kStackMask, std::memory_order_relaxed);
void Unpark(Waiter *w)
Definition: EventCount.h:220
References CheckState(), kSignalInc, kSignalMask, kSignalShift, kStackMask, kWaiterMask, kWaiterShift, state_, Unpark(), w, and waiters_.
Referenced by Eigen::ThreadPoolTempl< Environment >::Cancel(), Eigen::ThreadPoolTempl< Environment >::ScheduleWithHint(), test_basic_eventcount(), test_stress_eventcount(), Eigen::ThreadPoolTempl< Environment >::WaitForWork(), and Eigen::ThreadPoolTempl< Environment >::~ThreadPoolTempl().
◆ operator=()
void Eigen::EventCount::operator= |
( |
const EventCount & |
| ) |
|
|
delete |
◆ Park()
void Eigen::EventCount::Park |
( |
Waiter * |
w | ) |
|
|
inlineprivate |
◆ Prewait()
void Eigen::EventCount::Prewait |
( |
| ) |
|
|
inline |
◆ Unpark()
void Eigen::EventCount::Unpark |
( |
Waiter * |
w | ) |
|
|
inlineprivate |
◆ kEpochBits
const uint64_t Eigen::EventCount::kEpochBits = 64 - kEpochShift |
|
staticprivate |
◆ kEpochInc
const uint64_t Eigen::EventCount::kEpochInc = 1ull << kEpochShift |
|
staticprivate |
◆ kEpochMask
◆ kEpochShift
const uint64_t Eigen::EventCount::kEpochShift = 3 * kWaiterBits |
|
staticprivate |
◆ kSignalInc
const uint64_t Eigen::EventCount::kSignalInc = 1ull << kSignalShift |
|
staticprivate |
◆ kSignalMask
◆ kSignalShift
const uint64_t Eigen::EventCount::kSignalShift = 2 * kWaiterBits |
|
staticprivate |
◆ kStackMask
const uint64_t Eigen::EventCount::kStackMask = (1ull << kWaiterBits) - 1 |
|
staticprivate |
◆ kWaiterBits
const uint64_t Eigen::EventCount::kWaiterBits = 14 |
|
staticprivate |
◆ kWaiterInc
const uint64_t Eigen::EventCount::kWaiterInc = 1ull << kWaiterShift |
|
staticprivate |
◆ kWaiterMask
◆ kWaiterShift
const uint64_t Eigen::EventCount::kWaiterShift = kWaiterBits |
|
staticprivate |
◆ state_
std::atomic<uint64_t> Eigen::EventCount::state_ |
|
private |
◆ waiters_
The documentation for this class was generated from the following file: