Rogue Wave banner
Previous fileTop of DocumentContentsIndex pageNext file
Threads Module Reference Guide
Rogue Wave web site:  Home Page  |  Main Documentation Page

RWServerPool

Module:  Threads   Package:  Threading


RWServerPool RWRunnableServer

Local Index

Members

Header File

#include <rw/thread/RWServerPool.h>

Description

The RWServerPool object is an RWRunnableServer that manages a "pool" of other RWRunnableServer instances that are used to start runnable objects submitted for execution by other threads. A server pool object, when started, waits for other threads to enqueue runnable objects that they would like to have executed. Each runnable object that the server finds in its internal queue is dequeued and is passed to the next available runnable server from the pool. This process continues until the server pool object is interrupted, canceled, or stopped.

Runnables may be enqueued with a guard functor, or a priority value, or both.

The guard functor is used by the server to determine whether the associated runnable is currently eligible for retrieval and execution. A guarded runnable is not retrieved by the server until that runnable is the first runnable in the queue whose guard evaluates to true. Using guards to block runnable execution is important when implementing active objects; guards can be used to insure that the active object maintains consistent state and preserves any necessary invariants.

The priority value is used during write operations to determine a runnable's insertion point within the server's input queue, such that the set of un-processed and eligible runnables will be retrieved in priority order by the server.

The number of runnable servers to create for the internal pool may be specified when the server pool instance is created. A server pool instance does not create the RWRunnableServer instances for the pool, and does not process any enqueued runnables until the start() member is called. No runnables may be enqueued until the server pool is started.

The size of the runnable server pool may be adjusted after construction using the resize() member.

The stop() member is used to initiate server pool shutdown. The server pool will continue to dispatch any runnables already enqueued when stop() is called, but no additional runnables may be enqueued after that point. Once the pending runnables have been dispatched, the server pool thread will stop and join with the runnable servers in the pool and then exit. The stop function does not wait for the server to stop; to wait for the server pool thread to complete its shutdown exit, use the join() function.

The RWRunnable::requestCancellation() function should be used if the server thread is to stop execution as soon as possible without dequeuing and dispatching any additional runnables.

The RWRunnable::requestInterrupt() function can be used to temporarily suspend execution of the server thread.

Example

Static Member Functions

static RWServerPool
make(size_t numThreads);
static RWServerPool
make(size_t numThreads,size_t maxCapacity);
static RWServerPool
make(const RWThreadAttribute& serverAttr, size_t numThreads);
static RWServerPool
make(const RWThreadAttribute& serverAttr,
size_t numThreads, size_t maxCapacity);
static RWServerPool
make (size_t numThreads, const RWThreadAttribute& poolAttr);
static RWServerPool
make (size_t numThreads, const RWThreadAttribute& poolAttr,
size_t maxCapacity);
static RWServerPool
make(const RWThreadAttribute& serverAttr, size_t numThreads, 
     const RWThreadAttribute& poolAttr);
static RWServerPool
make(const RWThreadAttribute& serverAttr, size_t numThreads,
     const RWThreadAttribute& poolAttr, size_t maxCapacity);

Public Constructors

RWServerPool();
RWServerPool(const RWServerPool& second);

Public Destructor

~RWServerPool();

Public Member Operator

RWServerPool&
operator=(const RWServerPool& second);

Public Member Functions

RWThreadAttribute
getPoolAttribute();
void
resize(size_t size);
void
setPoolAttribute(const RWThreadAttribute& poolAttr);
size_t
size() const;

See Also

RWRunnable, RWThread, RWRunnableServer, RWThreadAttribute



Previous fileTop of DocumentContentsIndex pageNext file

© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.