Rogue Wave banner
Previous fileTop of DocumentContentsIndexNext file

RWServerPool


RWServerPool RWRunnableServer

Data Type and Member Function Indexes
(exclusive of constructors and destructors)

Member Functions

Package

Threading

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

Public Constructors

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

Public Member Operator

RWServerPool&
operator=(const RWServerPool& second);

Public Member Functions

RWThreadAttribute
getPoolAttribute(void)
throws(RWTHRInvalidPointer, RWTHRInternalError);
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)
void
resize(size_t size)
throws(RWTHRInvalidPointer, RWTHRInternalError);
void
setPoolAttribute(const RWThreadAttribute& poolAttr)
throws(RWTHRInvalidPointer, RWTHRInternalError);
size_t
size(void) const
throws(RWTHRInvalidPointer, RWTHRInternalError);

See Also

RWRunnable, RWThread, RWRunnableServer, RWThreadAttribute



Previous fileTop of DocumentContentsIndexNext file

©Copyright 2000, Rogue Wave Software, Inc.
Contact Rogue Wave about documentation or support issues.