• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            有些時候需要給資源分配一個唯一id(32bit or 64bit or CHAR[N]),這里主要說下分配方法問題。

            首先我們有個基本前提,如果是單線程分配,那么我們無需下面的方法,直接++value即可(CHAR型無論幾線程都可使用GUID)順序產生不重復序列,下面討論的方法都是多線程下的分配策略:

            方法1 win下做簡單的方法莫過于使用InterlocckedIncrement(or InterlockedIncrement64)了,這個調用也很簡單,每次遞增一個,多線程間保證順序遞增絕無重復。此方法只可在單一進程上使用。

             

            方法2、區間法,每個線程一次申請一個id區間[m, n],用完了再申請下一個區段,申請的時候鎖一次,其他時間都不用鎖,效率比3略低,比1高。此方法也只可在一個進程上使用,當然如果申請的策略修改一下也可實現多個進程甚至不同機器上的進程之間獨立分配id

             

            方法3、方法1雖然簡單但畢竟InterlockedXXX系列函數調用還是有些耗時的,大概50cpu周期級別,更簡單的方法可以使用線程切分原理,如有3個線程參與id分配,我們這樣分配:

            線程1 base=1, step =3,序列1,4,7,10,…

            線程2 base=2, step=3,序列2,5,8,11,…

            線程3 base=3, step=3,序列3,6,9,12,…

            絕無重復,調用非常簡單每個線程id = base; base += step;即可。

            此方法在單進程上使用很簡單,如果要拓展到多個進程上使用要通過配置來實現,但也是不難的。

             

            方法4、如果id可用GUID表示那么方法要簡單一點,生成id直接調用guid生成算法,這個id生成算法即使在多個進程之間甚至不同機器之間也可以保證唯一,也有其價值。

            Posted on 2010-10-03 14:13 袁斌 閱讀(1089) 評論(0)  編輯 收藏 引用
            色88久久久久高潮综合影院| 性欧美大战久久久久久久久| 国内精品伊人久久久久网站| 久久久久久国产精品免费免费| 久久99久久99精品免视看动漫| 亚洲AV无码久久精品蜜桃| 韩国无遮挡三级久久| 久久福利资源国产精品999| 996久久国产精品线观看| 久久综合久久综合亚洲| AV无码久久久久不卡网站下载| 亚洲国产成人精品91久久久| 久久er国产精品免费观看2| 99久久国产亚洲综合精品| 99久久99久久精品国产| 久久亚洲中文字幕精品有坂深雪 | 欧美激情一区二区久久久| AV狠狠色丁香婷婷综合久久| 思思久久99热只有频精品66| 99久久成人18免费网站| 国产午夜久久影院| 色偷偷88888欧美精品久久久| 久久无码人妻精品一区二区三区| 国产精品久久一区二区三区| 午夜精品久久久久久毛片| 色综合久久夜色精品国产| 欧美粉嫩小泬久久久久久久| 久久久WWW免费人成精品| 久久av免费天堂小草播放| 亚洲狠狠综合久久| 国产精品99久久精品爆乳| 91精品国产91久久久久久蜜臀| .精品久久久麻豆国产精品| 无遮挡粉嫩小泬久久久久久久| 精品一二三区久久aaa片| 狠狠色丁香久久婷婷综合_中| 久久受www免费人成_看片中文| 亚洲精品国产自在久久| 久久久SS麻豆欧美国产日韩| 亚洲精品乱码久久久久久按摩| AV无码久久久久不卡蜜桃|