- opt::item_counter - the type of item counting feature. Default is \p cds::atomicity::empty_item_counter (item counting disabled)
To enable item counting use \p cds::atomicity::item_counter
- opt::stat - the type to gather internal statistics.
- Possible statistics types are: \p optimistic_queue::stat, \p optimistic_queue::empty_stat,
+ Possible statistics types are: \p optimistic_queue::stat, \p optimistic_queue::empty_stat,
user-provided class that supports \p %optimistic_queue::stat interface.
Default is \p %optimistic_queue::empty_stat.
- opt::alignment - the alignment for internal queue data. Default is \p opt::cache_line_alignment
typedef T value_type;
typedef Traits traits;
- /*
- struct default_options {
- typedef cds::backoff::empty back_off;
- typedef CDS_DEFAULT_ALLOCATOR allocator;
- typedef atomicity::empty_item_counter item_counter;
- typedef intrusive::optimistic_queue::dummy_stat stat;
- typedef opt::v::relaxed_ordering memory_model;
- enum { alignment = opt::cache_line_alignment };
- };
- */
-
struct node_type: public cds::intrusive::optimistic_queue::node< gc >
{
value_type m_value;
- [2008] Edya Ladan-Mozes, Nir Shavit "An Optimistic Approach to Lock-Free FIFO Queues"
Template arguments:
- - \p GC - garbage collector type: gc::HP, gc::PTB. Note that gc::HRC is <b>not</b> supported
+ - \p GC - garbage collector type: \p gc::HP, \p gc::DHP.
- \p T - type of values to be stored in the queue
- \p Traits - queue traits, default is \p optimistic_queue::traits. You can use \p optimistic_queue::make_traits
metafunction to make your traits or just derive your traits from \p %optimistic_queue::traits:
typedef cds::container::OptimisticQueue< cds::gc::HP, Foo, myTraits > myQueue;
// Equivalent make_traits example:
- typedef cds::container::OptimisticQueue< cds::gc::HP, Foo,
- typename cds::container::optimistic_queue::make_traits<
+ typedef cds::container::OptimisticQueue< cds::gc::HP, Foo,
+ typename cds::container::optimistic_queue::make_traits<
cds::opt::stat< cds::container::optimistic_queue::stat<> >,
cds::opt::item_counter< cds::atomicity::item_counter >
>::type
> myQueue;
\endcode
*/
- template <typename GC, typename T, typename Traits>
+ template <typename GC, typename T, typename Traits = optimistic_queue::traits >
class OptimisticQueue:
#ifdef CDS_DOXYGEN_INVOKED
private intrusive::OptimisticQueue< GC, cds::intrusive::optimistic_queue::node< T >, Traits >
typedef typename base_class::stat stat; ///< Internal statistics policy used
typedef typename base_class::memory_model memory_model; ///< Memory ordering. See \p cds::opt::memory_model option
- static CDS_CONSTEXPR_CONST size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
+ static CDS_CONSTEXPR const size_t c_nHazardPtrCount = base_class::c_nHazardPtrCount; ///< Count of hazard pointer required for the algorithm
protected:
//@cond
*/
bool dequeue( value_type& dest )
{
- typedef cds::details::trivial_assign<value_type, value_type> functor;
return dequeue_with( [&dest]( value_type& src ) { dest = src; } );
}