UCommon
ucommon::MappedReuse Class Reference

Map a reusable allocator over a named shared memory segment. More...

#include <mapped.h>

Inheritance diagram for ucommon::MappedReuse:
Collaboration diagram for ucommon::MappedReuse:

Public Member Functions

bool avail (void) const
 Check whether there are objects available to be allocated.
 
ReusableObjectget (void)
 Request a reusable object from the free list or mapped space.
 
ReusableObjectgetLocked (void)
 Used to get an object from the reuse pool when the mutex lock is already held.
 
ReusableObjectgetTimed (timeout_t timeout)
 Request a reusable object from the free list or mapped space.
 
 MappedReuse (const char *name, size_t size, unsigned count)
 Construct a named memory segment for use with managed fixed size reusable objects.
 
void removeLocked (ReusableObject *object)
 Used to return an object to the reuse pool when the mutex lock is already held.
 
ReusableObjectrequest (void)
 Request a reusable object from the free list or mapped space.
 

Protected Member Functions

void create (const char *fname, unsigned count)
 
 MappedReuse (size_t osize)
 
- Protected Member Functions inherited from ucommon::ReusableAllocator
ReusableObjectnext (ReusableObject *object)
 Get next reusable object in the pool.
 
void release (ReusableObject *object)
 Release resuable object.
 
 ReusableAllocator ()
 Initialize reusable allocator through a conditional.
 
- Protected Member Functions inherited from ucommon::Conditional
void broadcast (void)
 Signal the conditional to release all waiting threads.
 
 Conditional ()
 Initialize and construct conditional.
 
void signal (void)
 Signal the conditional to release one waiting thread.
 
bool wait (struct timespec *timeout)
 Conditional wait for signal on timespec timeout.
 
bool wait (timeout_t timeout)
 Conditional wait for signal on millisecond timeout.
 
void wait (void)
 Wait (block) until signalled.
 
 ~Conditional ()
 Destroy conditional, release any blocked threads.
 
- Protected Member Functions inherited from ucommon::ConditionMutex
 ConditionMutex ()
 Initialize and construct conditional.
 
void lock (void)
 Lock the conditional's supporting mutex.
 
void unlock (void)
 Unlock the conditional's supporting mutex.
 
 ~ConditionMutex ()
 Destroy conditional, release any blocked threads.
 
- Protected Member Functions inherited from ucommon::MappedMemory
void create (const char *name, size_t size=(size_t) 0)
 Supporting function to construct a new or access an existing shared memory segment.
 
caddr_t addr (void)
 Get starting address of mapped segment.
 
bool copy (size_t offset, void *buffer, size_t size) const
 Copy memory from specific offset within the mapped memory segment.
 
size_t len (void) const
 Get size of mapped segment.
 
 MappedMemory (const char *name)
 Provide read-only mapped access to an existing named shared memory segment.
 
 MappedMemory (const char *name, size_t size)
 Construct a read/write access mapped shared segment of memory of a known size.
 
void * offset (size_t offset) const
 Get memory from a specific offset within the mapped memory segment.
 
 operator bool () const
 Test if map active.
 
bool operator! () const
 Test if map is inactive.
 
void release (void)
 Unmap memory segment.
 
void * sbrk (size_t size)
 Extend size of managed heap on shared memory segment.
 
virtual ~MappedMemory ()
 Unmap memory segment.
 

Additional Inherited Members

- Static Protected Member Functions inherited from ucommon::Conditional
static pthread_condattr_t * initializer (void)
 Support function for getting conditional attributes for realtime scheduling.
 
static void set (struct timespec *hires, timeout_t timeout)
 Convert a millisecond timeout into use for high resolution conditional timers.
 
- Static Protected Member Functions inherited from ucommon::MappedMemory
static void disable (void)
 An API that allows "disabling" of publishing shared memory maps.
 
static void remove (const char *name)
 Destroy a previously existing memory segment under the specified name.
 
- Protected Attributes inherited from ucommon::ReusableAllocator
ReusableObjectfreelist
 
unsigned waiting
 
- Protected Attributes inherited from ucommon::Conditional
pthread_cond_t cond
 
- Protected Attributes inherited from ucommon::ConditionMutex
pthread_mutex_t mutex
 
- Protected Attributes inherited from ucommon::MappedMemory
bool erase
 
char idname [65]
 
size_t size
 
size_t used
 
- Static Protected Attributes inherited from ucommon::Conditional
static attribute attr
 

Detailed Description

Map a reusable allocator over a named shared memory segment.

This may be used to form a resource bound fixed size managed heap in shared memory. The request can either be fulfilled from the object reuse pool or from a new section of memory, and if all memory in the segment has been exhausted, it can wait until more objects are returned by another thread to the reuse pool.

Author
David Sugar dyfet.nosp@m.@gnu.nosp@m.telep.nosp@m.hony.nosp@m..org

Definition at line 191 of file mapped.h.

Constructor & Destructor Documentation

◆ MappedReuse()

ucommon::MappedReuse::MappedReuse ( const char * name,
size_t size,
unsigned count )

Construct a named memory segment for use with managed fixed size reusable objects.

The segment is created as writable. There is no read-only version of mapped reuse since the mapped segment can be read by another process directly as a mapped read-only vector. The actual mapped type will be derived from ReusableObject to meet the needs of the reusable allocator. The template version should be used to assure type correctness rather than using this class directly.

Parameters
nameof shared memory segment.
sizeof the object type being mapped.
countof the maximum number of active mapped objects.

Member Function Documentation

◆ avail()

bool ucommon::MappedReuse::avail ( void ) const

Check whether there are objects available to be allocated.

Returns
true if objects are available.

◆ create()

void ucommon::MappedReuse::create ( const char * fname,
unsigned count )
inlineprotected

Definition at line 203 of file mapped.h.

◆ get()

ReusableObject * ucommon::MappedReuse::get ( void )

Request a reusable object from the free list or mapped space.

This method blocks until an object becomes available.

Returns
free object.

◆ getLocked()

ReusableObject * ucommon::MappedReuse::getLocked ( void )

Used to get an object from the reuse pool when the mutex lock is already held.

Returns
object from pool or NULL if exhausted.

◆ getTimed()

ReusableObject * ucommon::MappedReuse::getTimed ( timeout_t timeout)

Request a reusable object from the free list or mapped space.

This method blocks until an object becomes available or the timeout has expired.

Parameters
timeoutto wait in milliseconds.
Returns
free object or NULL if timeout.

◆ removeLocked()

void ucommon::MappedReuse::removeLocked ( ReusableObject * object)

Used to return an object to the reuse pool when the mutex lock is already held.

Parameters
objectbeing returned.

◆ request()

ReusableObject * ucommon::MappedReuse::request ( void )

Request a reusable object from the free list or mapped space.

Returns
free object or NULL if pool is exhausted.

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