原理:
1、以秒级时间戳为基础,在一台机器上产生一个自增序的序列号
2、在不重启的情况下,能够应对回秒的处理
3、在不重启的情况下,不大额回调的情况下,序列号具备递增的稳定性
INT64 CSequenceId::GetSeqIdWithLock()
{time_t referencePoint = REFERENCE_POINT;
INT64 unixtime = static_cast<INT64>(std::time(nullptr) - referencePoint);
static INT64 s_unixtime = unixtime;
CScopeMutexLocker cLocker(m_cLock);
if (s_unixtime < unixtime)
{
s_unixtime = unixtime;
m_lSeqId &= 0xFFFFFFFFFF000000;
}
m_lSeqId &= 0x00000000007FFFFF;
m_lSeqId++;
m_lSeqId |= (s_unixtime << 24);
return m_lSeqId;
}