0ããNãŸã§ã®æ°å€ã®ç¹å®ã®ç¯å²ãããã2ã€ã®é¢æ°int allocïŒïŒããã³freeïŒintïŒãèšè¿°ããå¿
èŠããããŸãã æåã®ãã®ã¯ç¯å²[0ãNïŒããç¡æã®èå¥åã®1ã€ãéžæãã2çªç®ã®ãã®ã¯åå©çšã®ããã«ããããè¿ããŸããèå¥åã®ç¹å®ã®æç¹ïŒã åæã«ããäžäœã¬ãã«ãã«ã¯
DHTã®ã¿ããããŸãã ããã¯ã¯ãããŸãããããã«ãã¢ã«ãŽãªãºã ã«ã¯ãã©ãŒã«ããã¬ã©ã³ã¹ãå¿
èŠã§ããã¯ã©ã¹ã¿ãŒããŒãã®ãããããã¢ã«ãŽãªãºã ã®å®è¡äžã«ãéçºããããå Žåãã·ã¹ãã ã®åäœã¯äºæž¬å¯èœã§ããå¿
èŠããããŸãã ã¿ã¹ã¯ãé¢çœãããã®ãããªçœ²åãæã€ãã§ã€ã«ã»ãŒããµãŒãã¹ãæ£ãã䜿çšã§ããªãçç±ãšã眲åãä¿®æ£ããŠãããå¯èœã«ããæ¹æ³ãèŠã€ããã®ãèå³æ·±ãã§ãã
API
å®éããã¢ãã±ãŒã¿ãŒãã®APIãæ確ã«ããããšããå§ããŸãããã äžèšã®ããã«ãçŸåšã®APIã¯æ£ãããããŸãã-åŒã³åºãå
ã®ã³ãŒããç¹å®ã®ããŒã«èŠçŽ ã®ç¹å®ã®ç¶æ
ãåžžã«ç解ã§ãããšã¯éããªããããåæ£ã·ã¹ãã ã§ã¯äœ¿çšã§ããŸããã
ç°¡åãªäŸã
1ïŒallocateïŒïŒé¢æ°ãåŒã³åºããšæåããŸãããallocateïŒïŒããã®å¿çãéä¿¡ããããšãåŒã³åºãå
ã®ã³ãŒãã¯æ©èœããªããªããŸãã åé¡-èå¥åã¯éç«ã£ãŠããŸããããããã«ã€ããŠã¯äœãç¥ããŸããã ç©ççã«äœããã®å埩æé ãèšè¿°ããŠåé€ããæ¹æ³ã¯ãããŸããã äžæ¹ããªãœãŒã¹ã®å²ãåœãŠãæ
åœããã³ãŒãã¯ãã§ã«æ©èœããŠããããã®èŠ³ç¹ããã¯èå¥åãå²ãåœãŠãããŠããŸãã ãããŠã圌èªèº«ããããåé€ããããšã¯ã§ããŸããããªããªã圌ã¯é»è©±ãç¡æã«ãªããŸã§åŸ
ããªããã°ãªããªãããã§ãã ããã§ã¯ãããŸããã
2ïŒfreeïŒïŒé¢æ°ã®ã¹ãçæ§ãå¿
èŠã§ãã æããã«ãåŒã³åºãã³ãŒãã¯ããããã®å Žåã§ãfreeïŒïŒãåŒã³åºãããã«äœæããå¿
èŠããããŸãã æããã«ãallocateããåçãåãåã£ããããããæ°žç¶ã¡ã¢ãªïŒRDBMSãããŒå€ã¹ãã¬ãŒãžããŸãã¯åã«ããªã³ã¿ãŒã«å°å·ããŠã¹ãã£ããŒã«çšçŽãããŒãããïŒã«å
¥ããŸãã ãããŠãããæç¹ã§ãããããŒãããªãœãŒã¹ã®åé€ã決å®ãããšãfreeïŒïŒãåŒã³åºããŸãã ãã ãã空ãããŒããå®è¡äžã®å ŽåãããŒãããªãã«ãªãããã³ãŒãªã³ã°ããŒãã£ãã¯æããã«å床åŒã³åºããè©Šã¿ãŸãïŒãããã©ã®ããã«å®è£
ãããã¯éèŠã§ã¯ãããŸãããå®è£
ããããšãéèŠã§ãïŒã ããã¯ãäžå¿«ãªé©ããç§ãã¡ãåŸ
ã£ãŠããå Žæã§ãã äºå®ãç¡æã§ããªãœãŒã¹ã解æŸã§ããå¯èœæ§ããããŸãã ããã«ããµãŒãããŒãã£ã®allocïŒïŒãåã³åŒ·èª¿è¡šç€ºããå ŽåããããŸãã ãã®åŸããªãœãŒã¹ãåã³è§£æŸããŸãããä»åã¯æ¢ã«ä»ã®èª°ãã®ãªãœãŒã¹ã«ãªã£ãŠããŸãã
äžè¬çã«ããããã®APIã®åé¡ã解決ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã
æãåçŽã§éåžžã«æ®éçãªã®ã¯ããªãœãŒã¹ã®åå²ãåœãŠã«ã¿ã°ãã¢ã¿ããããããšã§ããããã¯ãå²ãåœãŠ/解æŸæäœã®åãã¢ã«å¯ŸããŠäžæã«éžæãããŸãã
ã€ãŸããã¡ãœããã·ã°ããã£ã¯int allocïŒT tïŒããã³freeïŒint idãT tïŒã«å€æŽãããŸãã ã©ã®ã¿ã€ãã®Tã§ãã£ãŠããç¹å®ã®åå€é¢ä¿ãååšããããã䜿çšããŠäžèšã®2ã€ã®åé¡ã解決ã§ããããšãéèŠã§ãã ãŸããç¡æã®ã¡ãœãããã¹ãçã«ããããšãã§ããŸãã 第äºã«ãå²ãåœãŠããããå€ãæ
å ±ãåãåããªãã£ãããã¡ã³ãã ãèå¥åãåé€ããããã®æ¯èŒçç°¡åãªæé ãå°å
¥ã§ããŸãïŒåé¡1ãåç
§ïŒã èšäºãèšããŸããªãããã«ãããã«ã€ããŠã¯è©³ãã説æããŸããã
ã»ãšãã©ã®å Žåããã®æ¹æ³ã§å€æŽããããµãŒãã¹ãã»ãŒåžžã«äœ¿çšã§ããããšã«æ³šæããŠãã ããã ã»ãšãã©ã®å Žåããèå¥åããäœãã«å²ãåœãŠããã€ã§ããã®ãäœãããã¿ã°ãšããŠäœ¿çšã§ããŸãã
ããã§ããå°ãããéšåçãªãå®è¡ã®å Žåã«allocãšfreeãã©ã®ããã«åäœããããæ£ç¢ºã«ç解ããå¿
èŠããããŸãã
æããã«ãäžè¬çãªå ŽåãåŒã³åºãå
ã®ã³ãŒãã¯allocãå®è¡ããããã©ãããç¥ãããšãã§ããŸããã ãããã£ãŠãåŒã³åºãã³ãŒãã®æåã®ã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸã
â¢åŒã³åºãå
ã®ã³ãŒãã¯ãæåã«allocãåŒã³åºãããèå¥åãã©ããã«æžã蟌ã¿ã次ã«ãããåŒã³åºãå¿
èŠããããŸãã ãã®ãããåŒã³åºãå
ã®ã³ãŒãã¯ãéã®é åºã§å埩æé ãå®è£
ã§ããŸããéžæããããã¹ãŠã®ãã¢ïŒidãtïŒãå埩åŠçããã¹ãã¬ãŒãžã§èšåãããŠããªããã¹ãŠã®ãã¢ã«å¯ŸããŠç¡æã§åŒã³åºããŸãã
åæ§ã«ãåŒã³åºããããã©ããã«é¢ä¿ãªããããªãŒã¡ãœããã«ã€ããŠã¯åŠç¿ã§ããŸããã
ããããããã«2ã€ã®ã«ãŒã«ãçãŸããŸãã
â¢freeã¡ãœããã«æž¡ãããèå¥åã¯ãfreeã¡ãœãããåŒã³åºãåã«ãã·ã¹ãã ã§ãç¡æãã§ããïŒã€ãŸãã䜿çšãããŠããªãïŒãšèŠãªãããå¿
èŠããããŸãã
â¢ããã«ãããããããå°ãªããšã1ã€ã®åŒã³åºããæ£åžžã«å®äºãããŸã§ãfreeã¡ãœãããåŒã³åºããŠãã ããïŒèš±å®¹ããã-æ°åïŒã
ããã§ã¯ãå®è£
ã«ç§»ããŸãããã
å®è£
å
¥ãå£ã«DHTããããŸãã Javaã§æžããŠãã人ã®ããã«ã
ConcurrentMapãæã£ãŠãããšä»®å®ããŸãïŒã¡ãªã¿ã«ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ä»ã®èšèªã䜿çšããŠããéçºè
ã«ã¯æããã§ãïŒã åæã«ãç°ãªããã¹ãã®ConcurrentMapã¯åãã³ã³ãã³ãããèŠãŸããã
ããèªäœã§ã¯ãDHTã®æäœã¯ã¢ãããã¯ã§ãïŒããã¯DHTã®å€ãã®å®è£
ã§å®å
šã«ãµããŒããããŠããŸãïŒã
ãã ããDHTã®èª²é¡éã«ã¢ãããã¯æ§ã¯ãªãããããã®éšåãèæ
®ããŠããã®å®è£
ããµããŒãããå¿
èŠããããŸãã
å®è£
æããã«ãDHTã§ã¯id-> tïŒãŸãã¯ãã®éïŒãšãã圢åŒã®äœããã®ãããããããŸãã åé¡ã¯ããã¹ãŠã®ããžãŒããŒããçµç±ããã«æåã®ç©ºãIDãååŸããæ¹æ³ã§ããïŒ
ãã®ãããªè§£æ±ºçãææ¡ãããŠããŸãã 次ã®ãããªãã€ããªåºéããªãŒãæ§ç¯ããŸããã
â¢ããªãŒã«ãŒã-éé[0ãNïŒ
â¢éãªãŒãããŒãX [aãbïŒã®äžã«ã¯ãæ£ç¢ºã«2ã€ã®ããŒã[aãcïŒããã³[cãbïŒããããŸããcã¯ããããã®ééã®é·ããçãããªãããã«éžæãããŸãã
â¢ãããŠã[idãid + 1ïŒã®åœ¢åŒã®ééã¯ãããªãŒã®èã§ãã
æããã«ããã®ãããªããªãŒã«ã¯Nåã®ã·ãŒããããããããããlnïŒNïŒé·ç§»ã®ã«ãŒãããå°éã§ããŸãã
次ã«ãããªãŒã®åéãªãŒãããŒãã«ããã®ããŒããè¡šãééã§äºçŽãããŠããèå¥åã®æ°ãå
¥åããŸãããã ãããŠãããªãŒã®ãªãŒãããŒãã«ã察å¿ããèå¥åãããžãŒã®å Žåã¯ã¿ã°ãé
眮ããããªãŒã®å Žåã¯nullãé
眮ããŸãã
ããã§ããã®ããªãŒãDHTã«ä¿åããããšãã§ããŸãã ããã«ãããŒãã®æ
å ±ãæ£ããé åºã§æŽæ°ããããšãéèŠã§ããããã¯ãä»»æã®ã¹ãããã§å²ã蟌ãã å Žåã§ããã¢ã«ãŽãªãºã ãæ£ããæ©èœããå¿
èŠãããããã§ãã
fromãštoã®2ã€ã®ãã£ãŒã«ããæã€Intervalæ§é ããããããŒããªãŒãã³ã®ééïŒfromãå«ããtoã¯å«ãŸãªãïŒãå®çŸ©ãããšããŸãã æããã«ããã®ãããªæ§é ã¯ããªãŒããŒãããšã³ã³ãŒãããŸãã ãŸããããªãŒã«ã¯éè€ããŒãããªããããã«ããã®ãããªããªãŒã®ééã®äœçœ®ã決å®ããããã«äœãå¿
èŠãªãããšã«æ³šæããŠãã ããã èšãæããã°ãããªãŒèŠçŽ ãããã€ã³ã¿ãã«ãã€ã³ãããå¿
èŠã¯ãããŸããã ã©ã®ããŒãããäžãã«ãããã©ã®ããŒãããäžãã«ããããããŒãXããå€æã§ããã¢ã«ãŽãªãºã ããã€ã§ãæ§ç¯ã§ããŸãã
ããã¯ç§ãã¡ã®ç掻ãç°¡çŽ åããéèŠãªè²¡ç£ã§ãã
ãã®æ§é ã«ãå¿
èŠãªã³ã³ã¹ãã©ã¯ã¿ãŒãæãããªã€ã³ãŒã«ãšããã·ã¥ã³ãŒãããããããã«3ã€ã®æçšãªã¡ãœããããããŸãïŒleftïŒïŒãrightïŒïŒ-åããŒãã決å®ããupïŒïŒ-芪ã決å®ããŸã ãã¶ã€ããŒãšããã·ã¥ã³ãŒããããã°ã誰ãããããåŠçã§ãããšæããŸãã å·ŠïŒïŒãšå³ïŒïŒããããŸãã upïŒïŒé¢æ°ã®äœ¿çšã¯å€å°é£ãããªããŸããããããæžãããšã¯å¯èœã§ãïŒäžå¿
èŠãªè©³çŽ°ã§ããã¹ãããŒãããªãããã«èšäºã®æåŸã«æ»ããŸãïŒã
çŸåšãã¹ããã³ã°ããªãŒãã³ãŒãåã§ãããéæ³ã®ãééæ§é ãæã£ãŠãããããåé¡ã¯å°ãããŸãŸã§ãã
allocateã§ã¯ã空ã§ãªãã·ãŒããéžæããŠã¿ã°ãæžã蟌ãå¿
èŠããããŸãã次ã«ãéžæããã·ãŒãããäžã«ç§»åããŠå€ãæŽæ°ããŸãã 2ã€ã®ããšãèŠããŠããããšãéèŠã§ãã
â¢ã¢ãããã¯æäœputIfAbsentã«ãã£ãŠã¿ã°ããªã¹ãã«è¿œå ãããŸã
â¢ãªãŒã以å€ã®ããŒãã®å€ã¯ãread-modify-atomicUpdateã䜿çšããŠã«ãŒããä»ããŠæŽæ°ãããŸãã ã€ãŸããæŽæ°ãããããŒãããå€ãèªã¿åããåããŒãå
ã®å€ãèªã¿åããåå眮æãéããŠåã®åèšãæŽæ°ãããããŒãã«æžã蟌ã¿ãŸãã ã¢ãããã¯çœ®æãæ©èœããªãã£ãå Žåã¯ãæäœãç¹°ãè¿ããŸãã
â¢ããŒãã®ãµãããªãŒã«ç©ºãèãããããšãDHTããèªã¿åã£ããšããŠãããããå®éã«ããã«ãããšããæå³ã§ã¯ãããŸããã
ãããã£ãŠã空ã®ã·ãŒããèŠã€ããŠæŽæ°ããããã®ãã§ã€ã«ãã¡ãŒã¹ãæé ããã®ãæåãŸã§ããµã€ã¯ã«ãšããŠå²ãåœãŠãæžã蟌ãŸããŸãã ããªãŒã®æåã®å€æŽã¯ãã·ãŒãã®æŽæ°ã§ããããã®åŸã®ã¿-芪ããŒãã®æŽæ°ã§ããããšã«æ³šæããŠãã ããã ãããå¿
èŠãªçç±ã¯ allocateã¯ãã€ã§ãå®äºã§ããŸãã
Freeã¯åãããã«æ©èœããŸããã¿ã°ãèŠæ±ããããã®ãšäžèŽããããªãŒã®äžã®ããŒããæŽæ°ãããšãèå¥åãã解æŸãããŸãïŒã€ãŸããDHTããããŒããåé€ããŸãïŒã åæã«ãããŒãã®æŽæ°ã¯ãå²ãåœãŠã®æ¹æ³ãšäžèŽããŸãã 泚æãã¹ãéèŠãªããšã¯ããªãŒãããŒãã«å€ãå«ãŸããŠããªãå Žåã§ãïŒã€ãŸããfreeãæ¢ã«åŒã³åºãããŠããå Žåã§ãïŒfreeãããªãŒã®æŽæ°ãå®è¡ããããšã§ãã ãããå¿
èŠãªçç±ã¯ 以åã®freeã¯éšåçã«å®è¡ãããã·ãŒãã¯è§£æŸãããŸããã芪ããŒãã¯æŽæ°ãããŸããã å®éã«ã¯ããã®ããã«ãfreeãè€æ°ååŒã³åºãããšãã§ããæåŸã«åŒã³åºããæ£åžžã«å®äºããããšãçãããå Žåã¯å床åŒã³åºãå¿
èŠããããšããAPIã®èŠä»¶ãå¿
èŠã§ãã
æ©èœã¢ãã
å®éãçŽæãããïŒïŒé¢æ°ã ãããã¬ãã«ã®ééã®é·ãã2 ^ nã§ããããšã«åæããå Žåãå·ŠïŒïŒãå³ïŒïŒãããã³äžïŒïŒã®ã¹ãã«ã倧å¹
ã«ç°¡ç¥åãããããšã«æ³šæããŠãã ããã ãã®å ŽåãããªãŒå
ã®ä»ã®ééã¯2 ^ nã®é·ããæã¡ãããã«ãããªãŒã®åããã¬ãã«ãã®ééã¯åãé·ããæã¡ãŸãã äžè¬çã«ã3ã€ã®sabjé¢æ°ã¯ãã¹ãŠãä»»æã®ãããã¬ãã«ã®ééã§èšè¿°ã§ããŸãïŒãã ãããçŸåšã®ãééã«å ããŠãåžžã«äžäœã¬ãã«ã®ééãç¥ãå¿
èŠããããŸãïŒã ããããããã¯äžäŸ¿ã§ããã2 ^ nã«äžè¬åããŠãäœã害ã¯ãããŸããã
ãããã£ãŠãééã®é·ãã2 ^ nã®å Žåãå·ŠïŒïŒããã³å³ïŒïŒã¯ç°¡åã«èšè¿°ãããäžïŒïŒã«ã€ããŠã¯ãçŸåšã®ééããã®èŠªééã«å¯ŸããŠãå³ããŸãã¯ãå·Šãã§ãããã©ãããå€æããã ãã§ãã ããã¯åçŽãªã«ãŒã«ã«ãã£ãŠæ±ºå®ãããŸã-ãå·Šãã®ééã§ãåæå€ã¯æ®ãã®ééãªãã§ééã®2åã®é·ãã§é€ç®ãããŸãã ãããã£ãŠãééïŒå·ŠïŒïŒãŸãã¯å³ïŒïŒé¢æ°ã®ã©ã¡ãããååŸãããïŒãç¥ã£ãŠããã°ãå察ã®ã¢ã¯ã·ã§ã³ãé©çšããŠäžäœã¬ãã«ã®ééãååŸããã®ã¯ç°¡åã§ãã