|
cds
2.3.2
|
Lazy free-list based on bounded lock-free queue cds::intrusive::VyukovMPMCCycleQueue.
More...
#include <cds/memory/vyukov_queue_pool.h>
Public Types | |
| typedef cds::intrusive::VyukovMPMCCycleQueue< T, Traits > | queue_type |
| Queue type. | |
| typedef T | value_type |
| Value type. | |
| typedef Traits | traits |
| Pool traits. | |
| typedef traits::allocator::template rebind< value_type >::other | allocator_type |
| allocator type | |
Public Member Functions | |
| lazy_vyukov_queue_pool (size_t nCapacity=0) | |
| Constructs empty pool. | |
| ~lazy_vyukov_queue_pool () | |
| Deallocates all objects from the pool. | |
| value_type * | allocate (size_t n) |
| Allocates an object from pool. More... | |
| void | deallocate (value_type *p, size_t n) |
Deallocates the object p. More... | |
Lazy free-list based on bounded lock-free queue cds::intrusive::VyukovMPMCCycleQueue.
Template parameters:
T - the type of object maintaining by free-list. T must be default constructibleTraits - traits for cds::intrusive::VyukovMPMCCycleQueue class plus cds::opt::allocator option, default is vyukov_queue_pool_traits Internals
This free-list is very simple. At construction time the pool is empty. When allocating the free-list tries to pop an object from internal queue. If success the popped object is returned. Otherwise a new one is allocated. When deallocating, the free-list tries to push the object into the pool. If internal queue is full, the object is deallocated by using the allocator provided. The pool can manage more than N items but only N items is placed in the free-list.
Usage
lazy_vyukov_queue_pool should be used together with pool_allocator. You should declare an static object of type lazy_vyukov_queue_pool, provide an accessor functor to this object and use pool_allocator as an allocator:
|
inline |
Allocates an object from pool.
The pool supports allocation only single object (n = 1). If n > 1 the behavior is undefined.
If the queue is not empty, the popped value is returned. Otherwise, a new value allocated.
|
inline |
Deallocates the object p.
The pool supports allocation only single object (n = 1). If n > 1 the behaviour is undefined.
If the queue is not full, p is pushed into the queue. Otherwise, p is deallocated by allocator provided.