diff options
Diffstat (limited to 'ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp')
-rw-r--r-- | ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp b/ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp new file mode 100644 index 00000000000..162f60943f6 --- /dev/null +++ b/ACE/performance-tests/Synch-Benchmarks/Base_Test/mutex_test.cpp @@ -0,0 +1,205 @@ +// $Id$ + +#define ACE_BUILD_SVC_DLL + +#include "Baseline_Test.h" + +# if defined (ACE_HAS_THREADS) + +#include "ace/Log_Msg.h" +#include "ace/Token.h" +#include "ace/Process_Mutex.h" +#include "ace/RW_Mutex.h" +#include "ace/RW_Process_Mutex.h" +#include "ace/RW_Thread_Mutex.h" +#include "ace/Lock_Adapter_T.h" +#include "ace/Recursive_Thread_Mutex.h" +#include "ace/Semaphore.h" +#include "ace/Null_Semaphore.h" +#include "ace/Process_Semaphore.h" + + +template<class LOCK> +class ACE_Svc_Export Baseline_Lock_Test : public Baseline_Test_Base +{ +public: + virtual int acquire (); + virtual int release (); + // These two method are used to test try_acquire performance. + + virtual int test_acquire_release (); + virtual int test_try_lock (); + // Real test methods. + +private: + LOCK lock_; + // +}; + +template<class LOCK> int +Baseline_Lock_Test<LOCK>::acquire () +{ + int retv = 0; + switch (this->what_) + { + case TEST_READLOCK: + retv = this->lock_.acquire_read (); + break; + case TEST_WRITELOCK: + retv = this->lock_.acquire_write (); + break; + case TEST_LOCK: + default: + retv = this->lock_.acquire (); + break; + } + + return retv; +} + +template<class LOCK> int +Baseline_Lock_Test<LOCK>::release () +{ + return this->lock_.release (); +} + +template<class LOCK> int +Baseline_Lock_Test<LOCK>::test_acquire_release () +{ + baseline_options.start_inc_timer (); + + switch (this->what_) + { + case TEST_READLOCK: + for (; baseline_options.inc_loop_counter () ; ) + { + this->lock_.acquire_read (); + this->lock_.release (); + } + break; + case TEST_WRITELOCK: + for (; baseline_options.inc_loop_counter () ; ) + { + this->lock_.acquire_write (); + this->lock_.release (); + } + break; + case TEST_LOCK: + default: + for (; baseline_options.inc_loop_counter () ; ) + { + this->lock_.acquire (); + this->lock_.release (); + } + break; + } + + baseline_options.stop_inc_timer (); + + return 0; +} + +template<class LOCK> int +Baseline_Lock_Test<LOCK>::test_try_lock () +{ + baseline_options.start_inc_timer (); + switch (this->what_) + { + case TEST_READLOCK: + for (; baseline_options.inc_loop_counter () ; ) + this->lock_.tryacquire_read (); // This should always fail. + break; + case TEST_WRITELOCK: + for (; baseline_options.inc_loop_counter () ; ) + this->lock_.tryacquire_write (); // This should always fail. + break; + case TEST_LOCK: + default: + for (; baseline_options.inc_loop_counter () ; ) + this->lock_.tryacquire (); // This should always fail. + break; + } + + for (; baseline_options.inc_loop_counter () ; ) + this->lock_.tryacquire (); // This should always fail. + + baseline_options.stop_inc_timer (); + return 0; +} + +typedef Baseline_Lock_Test<ACE_Thread_Mutex> Baseline_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_RW_Thread_Mutex> Baseline_RW_Thread_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_RW_Thread_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_RW_Thread_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_RW_Mutex> Baseline_RW_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_RW_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_RW_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_Process_Mutex> Baseline_Process_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Process_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Process_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_RW_Process_Mutex> Baseline_RW_Process_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_RW_Process_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_RW_Process_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_Null_Mutex> Baseline_Null_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Null_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Null_Mutex_Test) + +typedef Baseline_Lock_Test< ACE_Lock_Adapter<ACE_Null_Mutex> > Baseline_Adaptive_Null_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Adaptive_Null_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Adaptive_Null_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_Recursive_Thread_Mutex> Baseline_Recursive_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Recursive_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Recursive_Mutex_Test) + +typedef Baseline_Lock_Test< ACE_Lock_Adapter<ACE_Thread_Mutex> > Baseline_Adaptive_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Adaptive_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Adaptive_Mutex_Test) + +typedef Baseline_Lock_Test< ACE_Lock_Adapter<ACE_RW_Mutex> > Baseline_Adaptive_RW_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Adaptive_RW_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Adaptive_RW_Mutex_Test) + +typedef Baseline_Lock_Test< ACE_Lock_Adapter<ACE_Recursive_Thread_Mutex> > Baseline_Adaptive_Recursive_Mutex_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Adaptive_Recursive_Mutex_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Adaptive_Recursive_Mutex_Test) + +typedef Baseline_Lock_Test<ACE_Semaphore> Baseline_Semaphore_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Semaphore_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Semaphore_Test) + +typedef Baseline_Lock_Test<ACE_Semaphore> Baseline_Process_Semaphore_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Process_Semaphore_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Process_Semaphore_Test) + +typedef Baseline_Lock_Test<ACE_Null_Semaphore> Baseline_Null_Semaphore_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Null_Semaphore_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Null_Semaphore_Test) + +typedef Baseline_Lock_Test<ACE_Token> Baseline_Token_Test; + +ACE_SVC_FACTORY_DECLARE (Baseline_Token_Test) +ACE_SVC_FACTORY_DEFINE (Baseline_Token_Test) + +#endif /* ACE_HAS_THREADS */ |