- Tag - a \ref cds_intrusive_hook_tag "tag"
*/
template <class GC, typename Tag = opt::none >
- using node = cds::intrusive::single_link::node< GC, Tag > ;
+ using node = cds::intrusive::single_link::node< GC, Tag >;
/// Base hook
/**
else
++m_PassivePopCollision;
}
- void onEliminationFailed()
+ void onEliminationFailed()
{
++m_EliminationFailed;
}
typedef cds::atomicity::empty_item_counter item_counter;
/// C++ memory ordering model
- /**
+ /**
Can be \p opt::v::relaxed_ordering (relaxed memory model, the default)
or \p opt::v::sequential_consistent (sequentially consisnent memory model).
*/
typedef treiber_stack::empty_stat stat;
/// Link checking, see \p cds::opt::link_checker
- static CDS_CONSTEXPR_CONST opt::link_check_type link_checker = opt::debug_check_link;
+ static CDS_CONSTEXPR const opt::link_check_type link_checker = opt::debug_check_link;
/** @name Elimination back-off traits
The following traits is used only if elimination enabled
///@{
/// Enable elimination back-off; by default, it is disabled
- static CDS_CONSTEXPR_CONST bool enable_elimination = false;
+ static CDS_CONSTEXPR const bool enable_elimination = false;
/// Back-off strategy to wait for elimination, default is cds::backoff::delay<>
typedef cds::backoff::delay<> elimination_backoff;
/// Metafunction converting option list to \p treiber_stack::traits
/**
- This is a wrapper for <tt> cds::opt::make_options< type_traits, Options...> </tt>
Supported \p Options are:
-
- opt::hook - hook used. Possible hooks are: \p treiber_stack::base_hook, \p treiber_stack::member_hook, \p treiber_stack::traits_hook.
If the option is not specified, \p %treiber_stack::base_hook<> is used.
- opt::back_off - back-off strategy used. If the option is not specified, the \p cds::backoff::Default is used.
Example: declare \p %TreiberStack with elimination enabled and internal statistics
\code
- typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
typename cds::intrusive::treiber_stack::make_traits<
cds::opt::enable_elimination< true >,
cds::opt::stat< cds::intrusive::treiber_stack::stat<> >
}
// Wait for colliding operation
- bkoff( [&op]() -> bool { return op.nStatus.load( atomics::memory_order_acquire ) != op_busy; } );
+ bkoff( [&op]() CDS_NOEXCEPT -> bool { return op.nStatus.load( atomics::memory_order_acquire ) != op_busy; } );
{
slot_scoped_lock l( slot.lock );
if ( slot.pRec == myRec )
Template arguments:
- \p GC - garbage collector type: \p gc::HP, \p gc::DHP.
Garbage collecting schema must be the same as \p treiber_stack::node GC.
- - \p T - a type the stack contains. A value of type \p T must be derived
+ - \p T - a type the stack contains. A value of type \p T must be derived
from \p treiber_stack::node for \p treiber_stack::base_hook,
or it should have a member of type \p %treiber_stack::node for \p treiber_stack::member_hook,
or it should be convertible to \p %treiber_stack::node for \p treiber_stack::traits_hook.
typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo, myTraits > myStack;
// Equivalent make_traits example:
- typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
- typename cds::intrusive::treiber_stack::make_traits<
- cds::opt::stat< cds::intrusive::treiber_stack::stat<> >
+ typedef cds::intrusive::TreiberStack< cds::gc::HP, Foo,
+ typename cds::intrusive::treiber_stack::make_traits<
+ cds::opt::stat< cds::intrusive::treiber_stack::stat<> >
>::type
> myStack;
\endcode
// Stack with elimination back-off enabled
typedef ci::TreiberStack< gc,
myData,
- typename ci::treiber_stack::make_traits<
+ typename ci::treiber_stack::make_traits<
ci::opt::hook< ci::treiber_stack::base_hook< gc > >,
cds::opt::enable_elimination< true >
>::type
// ...
};
- typedef ci::TreiberStack< gc,
- myData,
- typename ci::treiber_stack::make_traits<
+ typedef ci::TreiberStack< gc,
+ myData,
+ typename ci::treiber_stack::make_traits<
ci::opt::hook< ci::treiber_stack::base_hook< gc, tag1 > >
- >::type
+ >::type
> stack1_t;
- typedef ci::TreiberStack< gc,
- myData,
+ typedef ci::TreiberStack< gc,
+ myData,
typename ci::treiber_stack::make_traits<
ci::opt::hook< ci::treiber_stack::base_hook< gc, tag2 > >
>::type
// ...
};
- typedef ci::TreiberStack< gc,
+ typedef ci::TreiberStack< gc,
myData,
typename ci::treiber_stack::make_traits<
ci::opt::hook< ci::treiber_stack::member_hook< offsetof(myData, member_hook_), gc >>
\endcode
*/
template <
- typename GC,
- typename T,
- typename Traits = treiber_stack::traits
+ typename GC,
+ typename T,
+ typename Traits = treiber_stack::traits
>
class TreiberStack
{
public: // related to elimination back-off
/// Elimination back-off is enabled or not
- static CDS_CONSTEXPR_CONST bool enable_elimination = traits::enable_elimination;
+ static CDS_CONSTEXPR const bool enable_elimination = traits::enable_elimination;
/// back-off strategy used to wait for elimination
typedef typename traits::elimination_backoff elimination_backoff_type;
/// Lock type used in elimination back-off