您的位置:首页 > 其它

多线程安全计数器

2016-05-06 22:36 459 查看
在做性能测试时,需要统计运行一段时间内库使用锁的次数、获取时间戳的次数等。

在做这些库范围内的某个动作的次数统计时,如果库内是多线程且动作在多个线程内都出现。

可以使用下面的多线程安全的计数器

/// 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值就是目标动作的统计计数值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: