summaryrefslogtreecommitdiff
path: root/trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h')
-rw-r--r--trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h b/trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h
new file mode 100644
index 00000000000..4664bd3cda8
--- /dev/null
+++ b/trunk/ACE/performance-tests/Server_Concurrency/Leader_Follower/RT_CORBA_Leader_Follower.h
@@ -0,0 +1,109 @@
+//=============================================================================
+/**
+ * @file RT_CORBA_Leader_Follower.h
+ *
+ * $Id$
+ *
+ * The leader follower test modified to suit RTCORBA tests. The
+ * original leader follower test has too many things that doesnt
+ * get what we are looking for (read it as just confusing enough)
+ * . Hence a new test.
+ *
+ * @author Balachandran Natarajan <bala@cs.wustl.edu>
+ */
+//=============================================================================
+#ifndef PERF_TEST_RT_CORBA_LEADER_FOLLOWER_H
+#define PERF_TEST_RT_CORBA_LEADER_FOLLOWER_H
+#include /**/ "ace/pre.h"
+#include "ace/Task.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if defined (ACE_HAS_THREADS)
+
+#include "ace/Manual_Event.h"
+
+enum DEBUGGING_RANGE
+{
+ DEBUG_NONE = 0,
+ DEBUG
+};
+
+
+/**
+ * @class Synchronisers
+ *
+ * @brief This class provides all the synchrnoisers used in this
+ * test.
+ *
+ *
+ */
+
+/// Forward declaration..
+class Leader_Follower_Task;
+
+class Synchronisers
+{
+public:
+ friend class Leader_Follower_Task;
+
+ /// Ctor
+ Synchronisers (void);
+
+ int start_synchronization (void);
+ int end_synchronization (void);
+
+private:
+
+ /// The mutex and condition variable that is used for
+ /// synchronisation.
+ ACE_SYNCH_MUTEX mutex_;
+
+ ACE_SYNCH_CONDITION condition_;
+
+ /// A manual event
+ ACE_Manual_Event event_;
+};
+
+
+/**
+ * @class Leader_Follower_Task
+ *
+ * @brief This class provide the interface and an implementation to
+ * simulate how the LF pattern in the ORB would behave.
+ *
+ *
+ * Basically all threads ready to do an upcall would wait on a token
+ * or lock. The thread that gets the token before it gets ready to do
+ * the upcall would wake up a thread waiting on the token.
+ *
+ */
+
+class Leader_Follower_Task : public ACE_Task_Base
+{
+public:
+
+ /// Ctor with a mutex and a condition variable
+ Leader_Follower_Task (Synchronisers &synch);
+
+ /// Messages consumed
+ int processed (void);
+
+ /// Method that is run by a daemon thread
+ int svc (void);
+
+private:
+ /// Number of messages processed by this thread
+ int messages_consumed_;
+
+ /// Our reference to the synchroniser
+ Synchronisers &synch_;
+};
+
+#endif /*ACE_HAS_THREADS*/
+
+#include /**/ "ace/post.h"
+#endif /*PERF_TEST_RT_CORBA_LEADER_FOLLOWER*/