模仿java中的雪花算法

做商品生成訂單的時候經(jīng)常需要唯一標識翩活,模仿一下雪花算法的oc版本。
首先聲明.h文件中引入c語言文件

#ifndef TDSnowflake_h
#define TDSnowflake_h
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <errno.h>
#include <time.h>
#include <stdint.h>
#include <sys/time.h>
#endif /* TDSnowflake_h */
struct globle {
int global_int:12;
uint64_t last_stamp;
int workid;
int seqid;
};
void set_workid(int workid);
pid_t gettid( void );
uint64_t get_curr_ms(void);
uint64_t wait_next_ms(uint64_t lastStamp);
int atomic_incr(int id);
uint64_t get_unique_id(void);

.m文件中實現(xiàn)聲明的生成19位隨機值的方法

  #include "TDSnowflake.h"
  struct globle g_info;
  void set_workid(int workid)
  {
      g_info.workid = workid;
  }
  pid_t gettid( void )
  {
     return syscall( SYS_gettid );
  }
  uint64_t get_curr_ms()
  {
      struct timeval time_now;
      gettimeofday(&time_now,NULL);
      uint64_t ms_time=time_now.tv_sec*1000+time_now.tv_usec/1000;
      return ms_time;
  }

  uint64_t wait_next_ms(uint64_t lastStamp)
  {
      uint64_t cur = 0;
      do {
      cur = get_curr_ms();
      } while (cur <= lastStamp);
      return cur;
  }
  int atomic_incr(int id)
  {
       __sync_add_and_fetch( &id, 1 );
       return id;
  }
  uint64_t get_unique_id()
  {
       uint64_t uniqueId=0;
       uint64_t nowtime = get_curr_ms();
       uniqueId = nowtime<<22;
       uniqueId |=(g_info.workid&0x3ff)<<12;
       if (nowtime <g_info.last_stamp)
       {
         perror("error");
         exit(-1);
        }
       if(nowtime==g_info.last_stamp){
           g_info.seqid = atomic_incr(g_info.seqid)&(-1L ^ (-1L << 12L));
           if(g_info.seqid==0){
               nowtime = wait_next_ms(g_info.last_stamp);
             }
            }else{g_info.seqid = 0;}
           g_info.last_stamp = nowtime;
           uniqueId |=g_info.seqid;
          return uniqueId;
     }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凛虽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子广恢,更是在濱河造成了極大的恐慌凯旋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉迷,死亡現(xiàn)場離奇詭異至非,居然都是意外死亡,警方通過查閱死者的電腦和手機糠聪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門荒椭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舰蟆,你說我怎么就攤上這事趣惠。” “怎么了身害?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵味悄,是天一觀的道長。 經(jīng)常有香客問我塌鸯,道長侍瑟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涨颜,結(jié)果婚禮上费韭,老公的妹妹穿的比我還像新娘。我一直安慰自己庭瑰,他們只是感情好星持,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弹灭,像睡著了一般钉汗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲤屡,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音福侈,去河邊找鬼酒来。 笑死,一個胖子當著我的面吹牛肪凛,可吹牛的內(nèi)容都是我干的堰汉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼伟墙,長吁一口氣:“原來是場噩夢啊……” “哼翘鸭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戳葵,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤就乓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拱烁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體生蚁,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年戏自,在試婚紗的時候發(fā)現(xiàn)自己被綠了邦投。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡擅笔,死狀恐怖志衣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猛们,我是刑警寧澤念脯,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站阅懦,受9級特大地震影響和二,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耳胎,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一惯吕、第九天 我趴在偏房一處隱蔽的房頂上張望惕它。 院中可真熱鬧,春花似錦废登、人聲如沸淹魄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甲锡。三九已至,卻和暖如春羽戒,著一層夾襖步出監(jiān)牢的瞬間缤沦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工易稠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸废,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓驶社,卻偏偏與公主長得像企量,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亡电,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,869評論 6 13
  • 馬上就要畢業(yè)找工作了届巩,人生的最后一個暑假本來想用來好好學習CPA好好健身好好護膚,結(jié)果只剩20天了發(fā)現(xiàn)這個假期的收...
    Chelsea橘橘閱讀 274評論 1 2
  • 本打算上周舉行的“走進春天份乒,感受櫻花的美好”的活動計劃恕汇,因為天氣的變化改在了本周。孩子們當時非常沮喪冒嫡。本來定...
    mxn馬娜閱讀 476評論 0 1
  • 像這樣的日子拇勃,應(yīng)該應(yīng)景寫一寫男神。 我的生活中有兩位男神孝凌。一位與我共食煙火方咆,游歷人間,是我的依靠蟀架,我的愛...
    香故事閱讀 393評論 4 2