在做性能测试时,需要统计运行一段时间内库使用锁的次数、获取时间戳的次数等。
在做这些库范围内的某个动作的次数统计时,如果库内是多线程且动作在多个线程内都出现。
可以使用下面的多线程安全的计数器
/// Counter.h
#ifndef __COUNTER_H__
#define __COUNTER_H__
#include "Mutex.h"
class CCounter
{
CCounter();
~CCounter();
public:
static void count();
private:
static CMutex s_mutex;
static int s_count;
};
#define COUNT (CCounter::count();)
#endif
/// Counter.cpp
#include "Counter.h"
CMutex CCounter::s_mutex;
int CCounter::s_count;
void CCounter::count()
{
s_mutex.lock();
s_count++;
printf("s_count:%d\n", s_count);
s_mutex.unlock();
}
在需要统计的地方加上下行即可:
COUNT;
注:CCounter内部通过s_mutex保证了CCounter是线程安全的。
最后打印出的s_count值就是目标动作的统计计数值。