⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baseline_test.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// Baseline_Test.cpp,v 1.20 2005/01/21 02:19:20 ossama Exp#define  ACE_BUILD_SVC_DLL#include "Baseline_Test.h"# if defined (ACE_HAS_THREADS)#include "ace/OS_NS_unistd.h"#include "ace/Service_Repository.h"#include "ace/Get_Opt.h"#include "ace/Thread_Manager.h"#if !defined (__ACE_INLINE__)#include "Baseline_Test.i"#endif /* __ACE_INLINE__ */ACE_RCSID (Base_Test,           Baseline_Test,           "Baseline_Test.cpp,v 1.20 2005/01/21 02:19:20 ossama Exp")Baseline_Test_Options baseline_options;// Static Baseline Options holds the test configuration information// and the test statistics.Baseline_Test_Base::Baseline_Test_Base (void)  : Benchmark_Base (Benchmark_Base::BASELINE),    yield_method_ (Baseline_Test_Options::USE_SLEEP_ZERO),    iteration_ (DEFAULT_ITERATIONS),    what_(TEST_LOCK){}intBaseline_Test_Base::init (int argc, ACE_TCHAR *argv[]){  return this->parse_args (argc, argv);}intBaseline_Test_Base::parse_args (int argc, ACE_TCHAR *argv[]){  ACE_Get_Opt getopt (argc, argv, ACE_TEXT("i:ylrw"), 0);  int c;  while ((c = getopt ()) != -1)    switch (c)      {      case 'i':                 // Total iterations        {          int tmp = ACE_OS::atoi (getopt.opt_arg ());          if (tmp <= 0)            ACE_ERROR_RETURN ((LM_ERROR,                               "%d is not a valid value for iteration\n",                               tmp), -1);          else            this->iteration_ = static_cast<size_t> (tmp);        }        break;      case 'y':                 // Use thr_yield.        this->yield_method_ = Baseline_Test_Options::USE_THR_YIELD;        break;      case 'l':        this->what_ = TEST_LOCK;        break;      case 'r':        this->what_ = TEST_READLOCK;        break;      case 'w':        this->what_ = TEST_WRITELOCK;        break;      default:        ACE_ERROR ((LM_ERROR, "Invalid argument %c used\n", c));        break;      }  return 0;}voidBaseline_Test_Base::yield (void){  if (this->yield_method_ == Baseline_Test_Options::USE_SLEEP_ZERO)    ACE_OS::sleep (0);  else    ACE_OS::thr_yield ();}Baseline_Test_Options::Baseline_Test_Options (void)  : test_try_lock_ (0),    verbose_ (0),    current_yield_method_ (0),    current_iteration_ (0),    total_iteration_ (DEFAULT_ITERATIONS){}intBaseline_Test_Options::parse_args (int argc, ACE_TCHAR *argv[]){  ACE_Get_Opt getopt (argc, argv, ACE_TEXT("tv"), 0);  int c;  while ((c = getopt ()) != -1)    switch (c)      {      case 't':        this->test_try_lock_ = 1;        break;      case 'v':        this->verbose_ = 1;        break;      default:        ACE_ERROR ((LM_ERROR, "Invalid arguemnt %c used.\n", c));        break;      }  return 0;}intBaseline_Test_Options::reset_params (size_t iteration,                                     int yield){  this->current_iteration_ = 0;  this->timer.reset ();  this->current_yield_method_ = yield;  this->total_iteration_ = iteration;  return 0;}voidBaseline_Test_Options::print_result (void){  ACE_Time_Value tv;  ACE_hrtime_t nsec;  this->timer.elapsed_time_incr (tv);  this->timer.elapsed_time_incr (nsec);  ACE_DEBUG ((LM_DEBUG,              "Total Time: %d sec %d usec for a "              "total of %d iterations\n"              "Average time: %d nanoseconds.\n",              tv.sec (), tv.usec (),              this->current_iteration_,              (int) (nsec / this->current_iteration_)));}Baseline_Test::Baseline_Test (void)  : current_test_ (0),    get_lock_ (2),    let_go_lock_ (2){}// Initialize and run the benchmarks tests.intBaseline_Test::init (int argc, ACE_TCHAR **argv){  return baseline_options.parse_args (argc, argv);}intBaseline_Test::pre_run_test (Benchmark_Base *bb){  this->current_test_ = (Baseline_Test_Base *) bb;  baseline_options.reset_params (this->current_test_->iteration (),                                 this->current_test_->yield_method ());  if (baseline_options.test_try_lock ())    {      ACE_Thread_Manager::instance ()->spawn        (ACE_THR_FUNC (Baseline_Test::hold_lock),         (void *) this);      this->get_lock_.wait ();      // Wait until the lock is held by the spawning thread.    }  return 0;}intBaseline_Test::run_test (void){  if (baseline_options.test_try_lock ())    return this->current_test_->test_try_lock ();  else    return this->current_test_->test_acquire_release ();}intBaseline_Test::post_run_test (void){  if (baseline_options.test_try_lock ())    {      // Release the lock we hold.      this->let_go_lock_.wait ();      ACE_Thread_Manager::instance ()->wait ();    }  baseline_options.print_result ();  return 0;}intBaseline_Test::valid_test_object (Benchmark_Base *bb){  return (bb->benchmark_type () == Benchmark_Base::BASELINE);}void *Baseline_Test::hold_lock (void *arg){  Baseline_Test *this_test = (Baseline_Test *) arg;  this_test->current_test_->acquire ();  this_test->get_lock_.wait ();  this_test->let_go_lock_.wait ();  return 0;}ACE_SVC_FACTORY_DEFINE (Baseline_Test)#endif  /* ACE_HAS_THREADS */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -