思路:
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 用于获取预设的最