C++雪花算法實現

看來一下雪花算法的實現方法,用 c++試著實現了一下,這里僅僅是實現了算法的流程,但是具體的細節,如并發、多線程訪問等等沒有具體考慮。
雪花算法的簡單講解參考

#include <sys/select.h>
#include <iostream>
#include <chrono>
#include <random>
#include <ctime>
using namespace std;// 有序且全局唯一的 idlong long getTimeStamp() {return chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
}// sleep 1ms
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;// 41位時間戳,69年long long timeStamp = getTimeStamp();// 十位工作機器位 1024 節點long long machine = getMachineId();if (lastTimeStamp == timeStamp) {// 獲取當前時間戳,如果等于上次時間戳(同一毫秒內),則序列號加一;否則序列號賦值為0,從0開始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;
}

關注我的微信公眾號
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375469.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375469.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375469.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CAlayer層的屬性

iOS開發UI篇—CAlayer層的屬性 一、position和anchorPoint 1.簡單介紹 CALayer有2個非常重要的屬性&#xff1a;position和anchorPoint property CGPoint position; 用來設置CALayer在父層中的位置 以父層的左上角為原點(0, 0) property CGPoint anchorPoint; 稱為“定位點”、…

Window Linux下實現指定目錄內文件變更的監控方法

轉自&#xff1a;http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 對于監控指定目錄內文件變更&#xff0c;window 系統提供了兩個未公開API&#xff1a;SHChangeNotifyRegister SHChangeNotifyDeregister 分別用于注冊Notify以及監視。 同時&#xff0c;還提…

Odoo9發行說明

2015年10月1日&#xff0c;期待已久的Odoo9正式發布。本文是Odoo9正式版發行說明&#xff0c;基于官網資料翻譯。 譯者: 蘇州-微塵原文地址&#xff1a;https://www.odoo.com/page/odoo-9-release-notes譯文地址&#xff1a;http://blog.csdn.net/wangnan537/article/details/4…

揭秘史上最完美一步到位的搭建Andoriod開發環境

Windows環境下Android開發環境搭建雖然不難而且網上資料眾多&#xff0c;但是眾多資料如出一折 忽略了很多細節&#xff0c;最終還是沒能達到滿意效果。 基本步驟如下&#xff1a;JDK安裝、環境變量配置、Eclipse下載、AndoriodSDK下載安裝、下載配置ADT但是到這里還不算完美搞…

基于OpenCv的人臉檢測、識別系統學習制作筆記之二

在網上找到了一個博客&#xff0c;里面有大量內容適合初學者接觸和了解人臉檢測的博文&#xff0c;正好符合我目前的學習方面&#xff0c;故將鏈接放上來&#xff0c;后續將分類原博客的博文并加上學習筆記。 傳送門&#xff1a; http://blog.sina.com.cn/s/articlelist_160256…

URL 化

URL化。編寫一種方法&#xff0c;將字符串中的空格全部替換為%20。假定該字符串尾部有足夠的空間存放新增字符&#xff0c;并且知道字符串的“真實”長度。&#xff08;注&#xff1a;用Java實現的話&#xff0c;請使用字符數組實現&#xff0c;以便直接在數組上操作。&#xf…

第一章 00 StringUtil.cpp和StringUtil.hh分析

1 /*2 * StringUtil.hh3 *4 * Copyright 2002, Log4cpp Project. All rights reserved.5 *6 * See the COPYING file for the terms of usage and distribution.7 */8 頭文件的說明&#xff0c;以及與版權相關的說明一般都會放置在文件的開始位置 9 #ifndef _LOG4CPP_STR…

【SQL】服務器環境下的SQL

一、大型數據庫的三層體系結構 web服務器&#xff1a;比如在淘寶頁面上&#xff0c;輸入“牛肉干”&#xff0c;就是web服務器來處理&#xff0c;提交給應用服務器。 應用服務器&#xff1a;在獲取到“牛肉干”這個請求后&#xff0c;應用服務器決定如何匯集結果&#xff0c;并…

【置頂】全局變量的好處與壞處

近日在做項目的過程中對plsql的使用非常多&#xff0c;主要是編寫存儲過程實現業務邏輯。但是在coding的過程中遇到非常奇怪的問題。 問題是&#xff1a;在package包頭中定義了一個變量&#xff0c;current_time : sysdate,然后在procedure使用這個定義的變量&#xff0c;直接i…

三個線程按順序輸出數字

當 n 3N 時&#xff0c;線程1輸出 當 n 3N 1 時&#xff0c;線程2輸出 當 n 3N 2 時&#xff0c;線程3輸出 最終的輸出為 0、1、2、3、4、5、6、7、8、10 #include <iostream> #include <thread> #include <mutex> #include <condition_variable&g…

TextView實現自動滾動滾動.

必須有要四個屬性: android:ellipsize"marquee"; android:focusable"true";android"focusableInTouchMode"true";android:singleLine"true"; <TextViewandroid:layout_width"fill_parent"android:layout_height&quo…

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對于每個氣球&#xff0c;提供的輸入是水平方向上&#xff0c;氣球直徑的開始和結束坐標。由于它是水平的&#xff0c;所以y坐標并不重要&#xff0c;因此只要知道開始和結束的x坐標就足夠了。開始坐標總是小于結束坐標。平面內最多存在104個氣球…

ExtJS中使用ztree 不顯示樹的解決辦法

最近部門同事碰到一個問題&#xff0c;將ztree嵌入在套了幾層Panel的面板中不會正常顯示&#xff0c;但是將上層面板換成window就能正常顯示&#xff0c;開始以為是所在的外部容器不管嵌套了幾層&#xff0c;但是必須最底層是window容器&#xff0c;但是測試后發現不是這樣的&a…

尋找小鎮的法官

在一個小鎮里&#xff0c;按從 1 到 N 標記了 N 個人。傳言稱&#xff0c;這些人中有一個是小鎮上的秘密法官。 如果小鎮的法官真的存在&#xff0c;那么&#xff1a; 小鎮的法官不相信任何人。 每個人&#xff08;除了小鎮法官外&#xff09;都信任小鎮的法官。 只有一個人同…

事務的隔離界別

事務的ACID特性&#xff1a; 1、Atomicity原子性 事務操作的不可分割性&#xff0c;要么全部執行&#xff0c;要么回滾。 2、Consistency一致性 數據庫在事務處理前后處于的一致性狀態。如銀行轉賬&#xff0c;兩個賬戶轉賬前的狀態和轉賬后的狀態必須一致。 3、Isolation隔離…

程序員福利各大平臺免費接口非常適用

電商接口 京東獲取單個商品價格接口: http://p.3.cn/prices/mgets?skuIdsJ_商品ID&type1 ps:商品ID這么獲取:http://item.jd.com/954086.html 物流接口 快遞接口: http://www.kuaidi100.com/query?type快遞公司代號&postid快遞單號 ps:快遞公司編碼:申通”shentong”…

WriteN, RTMP send error

WriteN, RTMP send error 32 (133 bytes) WriteN, RTMP send error 32 (49 bytes) WriteN, RTMP send error 9 (42 bytes)現象&#xff1a; 推流失敗&#xff0c;srs服務出錯。 原因 視頻流較慢&#xff0c;音頻流較快。 復現 視頻解碼得到幀數據&#xff0c;用異步接口處…

樣式公用代碼

/************** bug ************/.clearfix:after {content:""; display:block; height:0px; clear:both; overflow:hidden;}.clearfix {display:inline-block;}.clearfix {display:block;} /************** 公共用 ************/html {overflow:-moz-scrollbars-v…

即時聊天IM之二 openfire 整合現有系統用戶

合肥程序員群&#xff1a;49313181。 合肥實名程序員群&#xff1a;128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojitqq.com 綜述&#xff1a; 每天利用中午時間更新下這個知識點的的博客如果感興趣的覺得更新慢了也別介意&#xff08;其它時間還是…

cannot convert ‘_IO_FILE*’ to ‘const char*

錯誤代碼 #ifdef NDEBUG#define DBUG_PRINT(fmt, ...) #else#define DBUG_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) #endifBUG_PRINT(stderr, "decode %s does not support device type cuda.\n", dec->name);修改 BUG_PRINT("decode %s does not supp…