A lock-free queue implementation to enqueue or dequeue a pointer of type T. More...
#include <rtt/AtomicQueue.hpp>
Public Types | |
| typedef T | value_t |
| typedef unsigned int | size_type |
Public Member Functions | |
| AtomicQueue (unsigned int lsize, unsigned int threads=ORONUM_OS_MAX_THREADS) | |
| Create a lock-free queue wich can store lsize elements. | |
| size_type | capacity () const |
| size_type | size () const |
| bool | isEmpty () const |
| Inspect if the Queue is empty. | |
| bool | isFull () const |
| Inspect if the Queue is full. | |
| void | clear () |
| bool | enqueue (const T &value) |
| Enqueue an item. | |
| int | enqueueCounted (const T &value) |
| Enqueue an item and return its 'ticket' number. | |
| bool | dequeue (T &result) |
| Dequeue an item. | |
| int | dequeueCounted (T &result) |
| Dequeue an item and return the same 'ticket' number when it was queued. | |
| template<class MPoolType > | |
| T | lockfront (MPoolType &mp) const |
| Return the next to be read value and lock it in a MemoryPool, such that it is not freed. | |
| value_t | front () const |
| Returns the first element of the queue. | |
| value_t | back () const |
| Returns the last element of the queue. | |
Public Attributes | |
| const unsigned int | MAX_THREADS |
| The maximum number of threads. | |
A lock-free queue implementation to enqueue or dequeue a pointer of type T.
No memory allocation is done during read or write, but the maximum number of threads which can access this object is defined by MAX_THREADS.
| T | The pointer type to be stored in the queue. Example : AtomicQueue<A*> is a queue which holds values of type A. | |
| ReadPolicy | The Policy to block (wait) on empty (during dequeue) using BlockingPolicy, or to return false, using NonBlockingPolicy (Default). This does not influence partial filled queue behaviour. | |
| WritePolicy | The Policy to block (wait) on full (during enqueue), using BlockingPolicy, or to return false, using NonBlockingPolicy (Default). This does not influence partial filled buffer behaviour. |
Definition at line 64 of file AtomicQueue.hpp.
| RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::AtomicQueue | ( | unsigned int | lsize, | |
| unsigned int | threads = ORONUM_OS_MAX_THREADS | |||
| ) | [inline] |
Create a lock-free queue wich can store lsize elements.
| lsize | the capacity of the queue. | |
| threads | the number of threads which may concurrently read or write this buffer. Defaults to ORONUM_OS_MAX_THREADS, but you may lower this number in case not all threads will read this buffer. A lower number will consume less memory. ' |
Definition at line 128 of file AtomicQueue.hpp.
| bool RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::dequeue | ( | T & | result | ) | [inline] |
Dequeue an item.
| result | The value dequeued. |
Definition at line 256 of file AtomicQueue.hpp.
Referenced by RTT::FixedSizeMemoryPool< Item >::allocate(), RTT::BufferLockFree< T, ReadPolicy, WritePolicy >::clear(), and RTT::BufferLockFree< T, ReadPolicy, WritePolicy >::Pop().
| int RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::dequeueCounted | ( | T & | result | ) | [inline] |
Dequeue an item and return the same 'ticket' number when it was queued.
| value | The value dequeued. |
Definition at line 291 of file AtomicQueue.hpp.
| bool RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::enqueue | ( | const T & | value | ) | [inline] |
Enqueue an item.
| value | The value to enqueue. |
Definition at line 210 of file AtomicQueue.hpp.
Referenced by RTT::FixedSizeMemoryPool< Item >::deallocate(), RTT::AtomicQueue< CommandInterface *, NonBlockingPolicy, NonBlockingPolicy >::dequeue(), and RTT::FixedSizeMemoryPool< Item >::make_pool().
| int RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::enqueueCounted | ( | const T & | value | ) | [inline] |
Enqueue an item and return its 'ticket' number.
| value | The value to enqueue. |
Definition at line 242 of file AtomicQueue.hpp.
| bool RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::isEmpty | ( | ) | const [inline] |
Inspect if the Queue is empty.
Definition at line 163 of file AtomicQueue.hpp.
Referenced by RTT::BufferLockFree< T, ReadPolicy, WritePolicy >::empty().
| bool RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::isFull | ( | ) | const [inline] |
Inspect if the Queue is full.
Definition at line 176 of file AtomicQueue.hpp.
Referenced by RTT::BufferLockFree< T, ReadPolicy, WritePolicy >::full().
| T RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::lockfront | ( | MPoolType & | mp | ) | const [inline] |
Return the next to be read value and lock it in a MemoryPool, such that it is not freed.
The returned pointer must be unlock()'ed by the user's code.
Definition at line 307 of file AtomicQueue.hpp.
Referenced by RTT::BufferLockFree< T, ReadPolicy, WritePolicy >::front().
| const unsigned int RTT::AtomicQueue< T, ReadPolicy, WritePolicy >::MAX_THREADS |
The maximum number of threads.
The number of threads which may concurrently access this buffer.
Definition at line 53 of file AtomicQueue.hpp.
Referenced by RTT::AtomicQueue< CommandInterface *, NonBlockingPolicy, NonBlockingPolicy >::AtomicQueue().
1.6.3