生活随笔
收集整理的這篇文章主要介紹了
C++雪花算法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看來一下雪花算法的實現方法,用 c++試著實現了一下,這里僅僅是實現了算法的流程,但是具體的細節,如并發、多線程訪問等等沒有具體考慮。
雪花算法的簡單講解參考
#include <sys/select.h>
#include <iostream>
#include <chrono>
#include <random>
#include <ctime>
using namespace std
;long long getTimeStamp() {return chrono
::duration_cast
<chrono
::milliseconds
>(chrono
::system_clock
::now().time_since_epoch()).count();
}
void sleep_ms(unsigned int ms
) {struct timeval time
;time
.tv_sec
= ms
/ 1000;time
.tv_usec
= (ms
/ 1000) % 1000000;select(0, NULL, NULL, NULL, &time
);
}long long getNextMsTimeStamp() {sleep_ms(1);return getTimeStamp();
}long long getMachineId() {default_random_engine e
;e
.seed(getTimeStamp());return e() % 1024;
}long long lastTimeStamp
= getTimeStamp();
long long sequence
= 0;
long long sequenceMask
= 0b111111111111
;long long getSnowflaksUid() {long long identifier
= 0;long long timeStamp
= getTimeStamp();long long machine
= getMachineId();if (lastTimeStamp
== timeStamp
) {sequence
= (sequence
+ 1) & (sequenceMask
); if (sequence
== 0) {timeStamp
= getNextMsTimeStamp();}} else {sequence
= 0;}lastTimeStamp
= timeStamp
;return (timeStamp
<< 22) | (machine
<< 12) | sequence
;
}int main() {cout
<< getSnowflaksUid() << endl
;return 0;
}
關注我的微信公眾號
總結
以上是生活随笔為你收集整理的C++雪花算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。