C++ 计数器类(单例、线程安全)

思路:

1. 使用单例保证计数器类全局引用唯一;

2. 使用范围锁确保多线程并发引用计数器的准确性;

3. 使用unsigned __int64类型作为计数器的类型。当计数器到达ULLONG_MAX(类型最大值)时,复位重新技术,并将循环计数。确保使用的计数器数量可计算。

代码:

1. SNGenertor.h

其中,调用NewSNGenertor接口为创建计算器类。其中,min为计数器起始值,max我计算器最大值(当为0时为ULLONG_MAX)。日常使用直接调用Get接口即可。

#pragma once
#include "locker.h"

typedef unsigned __int64 uint64;

class ScopedLock
{
private:
	Locker& mMutex;

public:
	ScopedLock(Locker& m)
		:mMutex(m)
	{
		mMutex.lock();
	}
	~ScopedLock()
	{
		mMutex.unlock();
	}
};

class SNGenertor
{

public:

	~SNGenertor() {}
	SNGenertor(const SNGenertor&) = delete;
	SNGenertor& operator=(const SNGenertor&) = delete;
	static SNGenertor& NewSNGenertor(uint64 min, uint64 max) {
		static SNGenertor ins(min,max);
		return ins;

	}

	uint64 Get();
	// Start 用于获取预设的最小序列号。
	uint64 Start();
	// Max 用于获取预设的最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值