using exempt_ptr = cds::urcu::exempt_ptr< gc, value_type, value_type, disposer, void >; ///< pointer to extracted node
+ //@cond
+ typedef feldman_hashset::level_statistics level_statistics;
+ //@endcond
+
protected:
//@cond
typedef typename base_class::node_ptr node_ptr;
value_type * pointer() const CDS_NOEXCEPT
{
- assert(gc::is_locked());
return m_pValue;
}
void forward()
{
- assert( gc::is_locked());
assert(m_set != nullptr);
assert(m_pNode != nullptr);
void backward()
{
- assert(gc::is_locked());
assert(m_set != nullptr);
assert(m_pNode != nullptr);
The set supports thread-safe iterators: you may iterate over the set in multi-threaded environment
under explicit RCU lock.
RCU lock requirement means that inserting or searching is allowed but you must not erase the items from the set
- since erasing under RCU lock can lead to a deadlock. However, another thread can call \p erase() safely
+ because erasing under RCU lock can lead to a deadlock. However, another thread can call \p erase() safely
while your thread is iterating.
A typical example is:
/// Count of hazard pointers required
static CDS_CONSTEXPR size_t const c_nHazardPtrCount = 2;
+ //@cond
+ typedef feldman_hashset::level_statistics level_statistics;
+ //@endcond
+
protected:
//@cond
typedef typename base_class::node_ptr node_ptr;