sysbench测试互斥锁参数详解

测试多核同步性能开销时,使用了sysbench来进行互斥锁开销测试。下面是互斥锁开销测试的核心代码。https://github.com/akopytov/sysbench/blob/master/src/tests/mutex/sb_mutex.c

sb_event_t mutex_next_event(int thread_id)
{
  sb_event_t         sb_req;
  sb_mutex_request_t   *mutex_req = &sb_req.u.mutex_request;

  (void) thread_id; /* unused */

  /* Perform only one request per thread */
  if (tls_counter++ > 0)
    sb_req.type = SB_REQ_TYPE_NULL;
  else
  {
    sb_req.type = SB_REQ_TYPE_MUTEX;
    mutex_req->nlocks = mutex_locks;
    mutex_req->nloops = mutex_loops;
  }

  return sb_req;
}


int mutex_execute_event(sb_event_t *sb_req, int thread_id)
{
  unsigned int         i;
  unsigned int         current_lock;
  sb_mutex_request_t   *mutex_req = &sb_req->u.mutex_request;

  (void) thread_id; /* unused */

  do
  {
    current_lock = sb_rand_uniform(0, mutex_num - 1);  //互斥锁的个数

    for (i = 0; i < mutex_req->nloops; i++)    //获得锁之前空循环的个数-模拟线程获得锁之前 
                                               //的执行动作。
      ck_pr_barrier();

    pthread_mutex_lock(&thread_locks[current_lock].mutex);
    global_var++;
    pthread_mutex_unlock(&thread_locks[current_lock].mutex);
    mutex_req->nlocks--;
  }
  while (mutex_req->nlocks > 0); //每个线程需要获得多少次锁

  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值