#include <ESF_Delayed_Changes.h>
Inheritance diagram for TAO_ESF_Delayed_Changes:
Public Types | |
typedef TAO_ESF_Connected_Command< TAO_ESF_Delayed_Changes< PROXY, COLLECTION, ITERATOR, ACE_SYNCH_USE >, PROXY > | Connected_Command |
typedef TAO_ESF_Reconnected_Command< TAO_ESF_Delayed_Changes< PROXY, COLLECTION, ITERATOR, ACE_SYNCH_USE >, PROXY > | Reconnected_Command |
typedef TAO_ESF_Disconnected_Command< TAO_ESF_Delayed_Changes< PROXY, COLLECTION, ITERATOR, ACE_SYNCH_USE >, PROXY > | Disconnected_Command |
typedef TAO_ESF_Shutdown_Command< TAO_ESF_Delayed_Changes< PROXY, COLLECTION, ITERATOR, ACE_SYNCH_USE > > | Shutdown_Command |
Public Methods | |
TAO_ESF_Delayed_Changes (void) | |
TAO_ESF_Delayed_Changes (const COLLECTION &collection) | |
int | busy (void) |
int | idle (void) |
int | execute_delayed_operations (void) |
void | connected_i (PROXY *proxy ACE_ENV_ARG_DECL) |
void | reconnected_i (PROXY *proxy ACE_ENV_ARG_DECL) |
void | disconnected_i (PROXY *proxy ACE_ENV_ARG_DECL) |
void | shutdown_i (ACE_ENV_SINGLE_ARG_DECL) |
virtual void | for_each (TAO_ESF_Worker< PROXY > *worker ACE_ENV_ARG_DECL) |
Iterate over the collection and invoke worker->work() for each member of the collection. More... | |
virtual void | connected (PROXY *proxy ACE_ENV_ARG_DECL) |
Insert a new element into the collection. The collection assumes ownership of the element. More... | |
virtual void | reconnected (PROXY *proxy ACE_ENV_ARG_DECL) |
Insert an element into the collection. More... | |
virtual void | disconnected (PROXY *proxy ACE_ENV_ARG_DECL) |
Remove an element from the collection. More... | |
virtual void | shutdown (ACE_ENV_SINGLE_ARG_DECL) |
The EC is shutting down, must release all the elements. More... | |
Private Types | |
typedef TAO_ESF_Busy_Lock_Adapter< TAO_ESF_Delayed_Changes< PROXY, COLLECTION, ITERATOR, ACE_SYNCH_USE > > | Busy_Lock |
Private Attributes | |
COLLECTION | collection_ |
Busy_Lock | lock_ |
ACE_SYNCH_MUTEX_T | busy_lock_ |
ACE_SYNCH_CONDITION_T | busy_cond_ |
CORBA::ULong | busy_count_ |
CORBA::ULong | write_delay_count_ |
CORBA::ULong | busy_hwm_ |
Control variables for the concurrency policies. More... | |
CORBA::ULong | max_write_delay_ |
ACE_Unbounded_Queue< ACE_Command_Base *> | command_queue_ |
This class implements the Delayed Operations protocol to solve the concurrency challenges outlined in the documentation of TAO_ESF_Proxy_Collection. In short the class delays changes by putting them on an "operation queue", the operations are stored as command objects in this queue and executed once the system is quiescent (i.e. no threads are iterating over the collection). The algorithm implemented so far is:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Insert a new element into the collection. The collection assumes ownership of the element.
Reimplemented from TAO_ESF_Proxy_Collection. |
|
|
|
Remove an element from the collection.
Reimplemented from TAO_ESF_Proxy_Collection. |
|
|
|
|
|
Iterate over the collection and invoke worker->work() for each member of the collection. This encapsulates Reimplemented from TAO_ESF_Proxy_Collection. |
|
|
|
Insert an element into the collection. No errors can be raised if the element is already present. The collection assumes ownership, i.e. must invoke <proxy->_decr_refcnt()> if the element is already present in the collection. Reimplemented from TAO_ESF_Proxy_Collection. |
|
|
|
The EC is shutting down, must release all the elements.
Reimplemented from TAO_ESF_Proxy_Collection. |
|
|
|
|
|
|
|
Control variables for the concurrency policies.
|
|
|
|
|
|
|
|
|
|
|
|
|