Home ⌂Doc Index ◂Up ▴
Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::internal::concurrent_queue_rep Class Reference

Internal representation of a ConcurrentQueue. More...

Collaboration diagram for tbb::internal::concurrent_queue_rep:

Public Member Functions

micro_queuechoose (ticket k)
 

Static Public Member Functions

static size_t index (ticket k)
 Map ticket to an array index. More...
 

Public Attributes

atomic< tickethead_counter
 
concurrent_monitor items_avail
 
atomic< size_t > n_invalid_entries
 
char pad1 [NFS_MaxLineSize-((sizeof(atomic< ticket >)+sizeof(concurrent_monitor)+sizeof(atomic< size_t >))&(NFS_MaxLineSize-1))]
 
atomic< tickettail_counter
 
concurrent_monitor slots_avail
 
char pad2 [NFS_MaxLineSize-((sizeof(atomic< ticket >)+sizeof(concurrent_monitor))&(NFS_MaxLineSize-1))]
 
micro_queue array [n_queue]
 
atomic< unsigned > abort_counter
 

Static Public Attributes

static const size_t n_queue = 8
 Must be power of 2. More...
 
static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2)
 Value for effective_capacity that denotes unbounded queue. More...
 

Static Private Attributes

static const size_t phi = 3
 Approximately n_queue/golden ratio. More...
 

Friends

struct micro_queue
 

Detailed Description

Internal representation of a ConcurrentQueue.

For efficiency, this class has no constructor. The caller is expected to zero-initialize it.

Definition at line 112 of file concurrent_queue.cpp.

Member Function Documentation

◆ choose()

micro_queue& tbb::internal::concurrent_queue_rep::choose ( ticket  k)
inline

Definition at line 139 of file concurrent_queue.cpp.

139  {
140  // The formula here approximates LRU in a cache-oblivious way.
141  return array[index(k)];
142  }
static size_t index(ticket k)
Map ticket to an array index.

References array, and index().

Referenced by tbb::internal::concurrent_queue_base_v3::internal_insert_if_not_full(), tbb::internal::concurrent_queue_base_v3::internal_insert_item(), tbb::internal::concurrent_queue_base_v3::internal_pop(), and tbb::internal::concurrent_queue_base_v3::internal_pop_if_present().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ index()

static size_t tbb::internal::concurrent_queue_rep::index ( ticket  k)
inlinestatic

Map ticket to an array index.

Definition at line 125 of file concurrent_queue.cpp.

125  {
126  return k*phi%n_queue;
127  }
static const size_t phi
Approximately n_queue/golden ratio.
static const size_t n_queue
Must be power of 2.

References n_queue, and phi.

Referenced by tbb::internal::concurrent_queue_iterator_base_v3::advance(), choose(), and tbb::internal::concurrent_queue_iterator_rep::get_item().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ micro_queue

friend struct micro_queue
friend

Definition at line 115 of file concurrent_queue.cpp.

Member Data Documentation

◆ abort_counter

◆ array

◆ head_counter

◆ infinite_capacity

const ptrdiff_t tbb::internal::concurrent_queue_rep::infinite_capacity = ptrdiff_t(~size_t(0)/2)
static

Value for effective_capacity that denotes unbounded queue.

Definition at line 147 of file concurrent_queue.cpp.

Referenced by tbb::internal::concurrent_queue_base_v3::internal_set_capacity().

◆ items_avail

◆ n_invalid_entries

◆ n_queue

◆ pad1

char tbb::internal::concurrent_queue_rep::pad1[NFS_MaxLineSize-((sizeof(atomic< ticket >)+sizeof(concurrent_monitor)+sizeof(atomic< size_t >))&(NFS_MaxLineSize-1))]

Definition at line 132 of file concurrent_queue.cpp.

◆ pad2

char tbb::internal::concurrent_queue_rep::pad2[NFS_MaxLineSize-((sizeof(atomic< ticket >)+sizeof(concurrent_monitor))&(NFS_MaxLineSize-1))]

Definition at line 136 of file concurrent_queue.cpp.

◆ phi

const size_t tbb::internal::concurrent_queue_rep::phi = 3
staticprivate

Approximately n_queue/golden ratio.

Definition at line 118 of file concurrent_queue.cpp.

Referenced by index().

◆ slots_avail

◆ tail_counter


The documentation for this class was generated from the following file:

Copyright © 2005-2020 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.