多线程安全计数器

来源:互联网 发布:知是故人来 编辑:程序博客网 时间:2024/06/05 15:58

在做性能测试时,需要统计运行一段时间内库使用锁的次数、获取时间戳的次数等。

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


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

/// 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值就是目标动作的统计计数值。

0 0
原创粉丝点击