生活随笔
收集整理的這篇文章主要介紹了
                                
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++雪花算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。