以åã®ã¡ã¢ã§ã¯ãããã¯ããªãŒããŒã¿æ§é ãæ§ç¯ãããåºç€ãããã³ããã¯ããªãŒããŒã¿æ§é ã®èŠçŽ ã®å¯¿åœãå¶åŸ¡ããããã®åºæ¬çãªã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸããã ããã¯ãããã¯ããªãŒã³ã³ãããŒèªäœã®èª¬æã®å眮ãã§ããã ãããããã®åŸãç§ã¯åé¡ã«ééããŸããïŒãããªãã¹ããŒãªãŒãæ§ç¯ããæ¹æ³ã¯ïŒ ç¥ã£ãŠããã¢ã«ãŽãªãºã ã説æããŠãã ããã ããã¯ããªãéå±ã§ãïŒå€ãã®[æ¬äŒŒ]ã³ãŒããè±å¯ãªè©³çްããã¡ããéèŠã§ãããéåžžã«å
·äœçã§ãã æåŸã«ãããã¯ãç§ãåç
§ããå
¬éãããäœåãããã³ãã詳现ã§å³å¯ãªãã¬ãŒã³ããŒã·ã§ã³ã«ãããŸãã ç«¶äºåã®ããã³ã³ããã®èšèšãžã®ã¢ãããŒããéçºããæ¹æ³ã瀺ãããã«ãè峿·±ãããšã«ã€ããŠè峿·±ãããšãäŒãããã£ãã®ã§ãã
ããŠããã¬ãŒã³ããŒã·ã§ã³æ¹æ³ã¯æ¬¡ã®ããã«ãã¹ãã ãšæããŸãããäœããã®çš®é¡ã®ã³ã³ããïŒã¿ãŒã³ãããããããã·ã¥ãããïŒã䜿çšãããã®çš®é¡ã®ã³ã³ããã®çŸåšç¥ãããŠããå
ã®ã¢ã«ãŽãªãºã ã確èªããŸãã ã©ãããå§ããŸããïŒ ãããŠãæãåçŽãªããŒã¿æ§é ã§ããã¹ã¿ãã¯ãæãåºããŸããã
ã¹ã¿ãã¯ã«ã€ããŠäœãšèšããŸããïŒ ããã¯ãããããªããŒã¿æ§é ã§ãããèšãããšã¯ã»ãšãã©ãããŸããã
å®éãç«¶åã¹ã¿ãã¯ã®å®è£
ã«é¢ããäœæ¥ã¯ããã»ã©å€ããããŸããã ããããäžæ¹ã§ãã¹ã¿ãã¯èªäœãããã¢ãããŒãã«å°å¿µããŠãããã®ã ç§ãèå³ãæã£ãŠããã®ã¯ã¢ãããŒãã§ãã
ããã¯ããªãŒã¹ã¿ãã¯
ã¹ã¿ãã¯ã¯ãããããããã¯ããªãŒã¢ã«ãŽãªãºã ãäœæãããæåã®ããŒã¿æ§é ã§ãã Treiberã1986幎ã®
èšäºã§æåã«å
¬éãããšèããããŠããŸããããã®ã¢ã«ãŽãªãºã ãIBM / 360ã·ã¹ãã ã®ããã¥ã¡ã³ãã§æåã«èª¬æããããšãã蚌æ ããããŸãã
æŽå²çãªé ãå®¶äžè¬ã«ãTreiberã®èšäºã¯äžçš®ã®æ§çŽèæžã§ãããããããããã¯ããªãŒããŒã¿æ§é ã«é¢ããæåã®èšäºã§ãã ãããã«ãããç§ã¯ä»¥åã®ãã®ãç¥ããŸããã ããã¯ããªãŒã®ã¢ãããŒãã®åµå§è
ãžã®ãªããŒãžã¥ãšããŠãããã¯æããã«çŸä»£ã®äœåã®åèæç®ã§éåžžã«é »ç¹ã«èšåãããŠããŸãã
ã¢ã«ãŽãªãºã ã¯éåžžã«åçŽãªã®ã§ã
libcdsããé©å¿ã³ãŒãã
æäŸããŸã ïŒèå³ã®ãã人ã¯ã
cds::intrusive::TreiberStack
intrusive stackïŒïŒ
ãã®ã¢ã«ãŽãªãºã ã¯ãããŒã³ïŒããšãã°ã
ãã ïŒã«ãã£ãŠç¹°ãè¿ãéã¢ã»ã³ãã«ããããããç¹°ãè¿ããŸããã ã¢ã«ãŽãªãºã ã®ç°¡åãªèª¬æã¯ãç®çã®çµæãåŸããããŸã§ã
m_Top
ã¢ãããã¯ããªããã£ãCASã®å©ããåããŠãã³ããŒãããšããäºå®ã«éå
ãããŸãã ã·ã³ãã«ã§ããªãåå§çã
2ã€ã®è峿·±ãè©³çŽ°ã«æ³šæããŠãã ããã
- å®å
šãªã¡ã¢ãªåçïŒSMRïŒã¯
pop
ã¡ãœããã§ã®ã¿å¿
èŠã§ãm_Top
ãã£ãŒã«ããèªã¿åãã®ã¯ããã ãã ããã§ãã m_Top
ãã£ãŒã«ãã¯push
èªã¿åãããªãpush
ïŒ m_Top
ãã€ã³ã¿ãŒãžã®ã¢ã¯ã»ã¹ã¯ãããŸããïŒããã€ã³ã¿ãŒã§ãã¶ãŒããä¿è·ããå¿
èŠã¯ãããŸããã éåžžãããã¯ããªãŒã³ã³ããã¯ã©ã¹ã®ãã¹ãŠã®ã¡ãœããã§SMRãå¿
èŠã«ãªããããããã¯è峿·±ãããšã§ãã - ç¥ç§çãª
bkoff
ãªããžã§ã¯ããšãCASã倱æããå Žåã®bkoff()
ãžã®åŒã³åºã
ãã®éåžžã«
bkoff
ã«ã€ããŠã¯ãããã«è©³ãã説æããŸãã
ããã¯ãªãæŠç¥

CASã倱æããã®ã¯ãªãã§ããïŒ æããã«ã
m_Top
ã®çŸåšã®å€ã
m_Top
ãŠããCASãé©çšããããšããéã«ãä»ã®ã¹ã¬ããã
m_Top
ã®å€ã倿Žããããšã
m_Top
ã§ãã ã€ãŸããç«¶äºã®å
žåçãªäŸããããŸãã ç«¶åãæ¿ããå ŽåãNåã®ã¹ã¬ããã
push
/
pop
å®è¡ãããšããã®ãã¡ã®1ã€ã ããåã¡ãæ®ãã®N-1ã¯CPUæéãæµªè²»ããCASã§äºãã«å¹²æžããŸãïŒ
MESIãã£ãã·ã¥ãããã³ã«ãæãåºã
ãŠãã ãã ïŒã
ãã®ãããªç¶æ³ãæ€åºããããšãã«ããã»ããµãã¢ã³ããŒãããã«ã¯ã©ãããã°ããã§ããïŒ ã¡ã€ã³ã¿ã¹ã¯ããæ»ã£ãŠäœã圹ã«ç«ã€ããšãããããåã«åŸ
ã€ããšãã§ããŸãã ãããããã¯ãªãæŠç¥ã®ç®çã§ãã
ãã¡ãããç¹å®ã®ã¿ã¹ã¯ã«ã€ããŠã¯ããããªãã®ã§ãã圹ã«ç«ã€ããšã¯ã§ããŸããããšããäžè¬çãªã±ãŒã¹ã§ã¯ãåŸ
ã€ããšããã§ããŸããã ã©ããã£ãŠåŸ
ã€ã®ïŒ
sleep()
ãªãã·ã§ã³ã«æ³šæããŠãã ãã-ãã®ãããªå°ããªåŸ
æ©ã¿ã€ã ã¢ãŠããæäŸã§ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã»ãšãã©ãããŸããããŸããã³ã³ããã¹ãã®åãæ¿ãã®ãªãŒããŒãããã倧ããããŸã-CASã©ã³ã¿ã€ã ããã倧ããã§ãã
åŠè¡ç°å¢ã§ã¯ã
ææ°é¢æ°çããã¯ãªãæŠç¥ãäžè¬çã§ãã ã¢ã€ãã¢ã¯éåžžã«ç°¡åã§ãã
class exp_backoff { int const nInitial; int const nStep; int const nThreshold; int nCurrent; public: exp_backoff( int init=10, int step=2, int threshold=8000 ) : nInitial(init), nStep(step), nThreshold(threshold), nCurrent(init) {} void operator()() { for ( int k = 0; k < nCurrent; ++k ) nop(); nCurrent *= nStep; if ( nCurrent > nThreshold ) nCurrent = nThreshold; } void reset() { nCurrent = nInitial; } };
ã€ãŸããã«ãŒãã®é·ããå¢ãããã³ã«ãã«ãŒãå
ã§
nop()
ãå®è¡ããŸãã
nop()
代ããã«ããã£ãšäŸ¿å©ãªãã®ãåŒã³åºãããšãã§ããŸããããšãã°ããå
éšåé¡ãå®äºããæéããããããšãããã»ããµã«äŒãã
ãããã³ã€ã³ãã³ãåœä»€ïŒããå ŽåïŒã
èšç®ã§ããŸãïŒMESIãæãåºããŠãã ãã-ããã»ããµã«ã¯ãã®ãããªãã®ããããŸãïŒå€åæµ·ïŒã
ææ°ããã¯ãªãã®åé¡ã¯åçŽã§ã-é©åãªãã©ã¡ãŒã¿ãŒ
nInitial
ã
nStep
ã
nThreshold
ãèŠã€ããã®ã¯å°é£
nThreshold
ã ãããã®å®æ°ã¯ãã¢ãŒããã¯ãã£ãšã¿ã¹ã¯ã«äŸåããŠããŸãã äžèšã®ã³ãŒãã§ã¯ããããã®ããã©ã«ãå€ã¯å€©äºããååŸãããŸãã
ãããã£ãŠãå®éã«ã¯ããã¹ã¯ãããããã»ããµãšãšã³ããªã¬ãã«ãµãŒããŒã«é©ããéžæè¢ã¯ã
yield()
ããã¯ãªã-å¥ã®ã¹ã¬ãããžã®åãæ¿ãã§ãã ãã®ããã«ããŠãä»ã®ããæåãããããŒã«æéãäžãã圌ããå¿
èŠãšããããšãè¡ããç§ãã¡ãç
©ãããªãããšãæã¿ãŸãïŒãããŠããããæ¢ããŸãïŒã
ãšã«ããããã¯ãªãæŠç¥ãé©çšããæ¹æ³ã¯ãããŸããïŒ å®éšã§ã¯ãäžã€ã®ããšã瀺ããŠããŸããæ£ããããã«ããã¯ã«æ£ããããã¯ãªãæŠç¥ãé©çšãããšãããã¯ããªãŒã³ã³ãããŒã®ããã©ãŒãã³ã¹ãæ°ååäžããå¯èœæ§ããããŸãã
èæ
®ãããããã¯ãªãæŠç¥ã¯ã倱æããCASã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸãããäž»ãªã¿ã¹ã¯ïŒã¹ã¿ãã¯ã®æäœïŒã®å®è£
ã«ã¯ãŸã£ããå¯äžããŸããã ããã¯ãªãæŠç¥ãç©æ¥µçã«éçšãæ¯æŽããããã«ã
push
/
pop
ãšããã¯ãªããäœããã®åœ¢ã§çµã¿åãããããšã¯å¯èœã§ããïŒ
æ¶å»ããã¯ãªã
äžæ¹ã
push
/
pop
ã§å€±æããCASã®åé¡ãèæ
®ããŠãã ããã CASã倱æããã®ã¯ãªãã§ããïŒ å¥ã®ã¹ã¬ããã
m_Top
倿Žããããã ãããŠããã®ä»ã®ã¹ã¬ããã¯äœãããŸããïŒ
push()
ãŸãã¯
pop()
å®è¡ããŸãã ã¹ã¿ãã¯ã®
push
æäœãš
pop
æäœã¯çžè£çã§ãã
push
泚æããŠãã ããïŒ1ã€ã®ã¹ã¬ããã
push()
ããåæã«ä»ã®ã¹ã¬ããã
pop()
ããå ŽåãååãšããŠ
m_Top
ã¹ã¿ãã¯ã®æäžéšã«ã¢ã¯ã»ã¹ããæå³ã¯ãããŸããïŒããã·ã¥ã¹ããªãŒã ã¯åã«ãã®ããŒã¿ããããã¹ããªãŒã ã«è»¢éããŸãããã¹ã¿ãã¯ã®äž»èŠãªããããã£ã§ããLIFOã¯éåãããŸããã ã¹ã¿ãã¯ã®æäžéšããã€ãã¹ããŠããããã®äž¡æ¹ã®ãããŒããŸãšããæ¹æ³ãçè§£ããããšã¯æ®ã£ãŠããŸãã

2004幎ã«ãHendlerãShavitãããã³Yerushalmiã¯ãTreiberã¢ã«ãŽãªãºã ã®ä¿®æ£ã
ææ¡ããŸããããã®ã¢ã«ãŽãªãºã ã§ã¯ãã¹ã¿ãã¯ã®æäžéšã䜿çšããã«ããã·ã¥ã¹ããªãŒã ãšãããã¹ããªãŒã éã§ããŒã¿ã転éããã¿ã¹ã¯ãã
åé€ããã¯ãªãæŠç¥ïŒãšãªãããŒã·ã§ã³ããã¯æŠç¥ïŒãšåŒã°ããç¹å¥ãªããã¯ãªãæŠç¥ã䜿çšããŠè§£æ±ºãããŸã-offãç§ãããã
åžåããã¯ãªãæŠç¥ãšããŠç¿»èš³ããŸãïŒã
ãµã€ãºNã®æ¶å»é
åããããŸãïŒNã¯å°ããªæ°ã§ãïŒã ãã®é
åã¯ãã¹ã¿ãã¯ã¯ã©ã¹ã®ã¡ã³ããŒã§ãã CASã倱æããŠããã¯ãªããããšãã¹ã¬ããã¯ãã®æäœïŒ
push
ãŸãã¯
pop
ïŒã®ãã³ãã«ãäœæãããã®é
åå
ã®ä»»æã®ã»ã«ãã©ã³ãã ã«éžæããŸãã ã»ã«ã空ã®å Žåããã®èšè¿°åãžã®ãã€ã³ã¿ãŒãæžã蟌ã¿ãéåžžã®ããã¯ãªãïŒææ°ãªã©ïŒãå®è¡ããŸãã ãã®å ŽåããããŒã¯ããã·ããšåŒã°ããŸãã
éžæããã»ã«ã«ä»ã®ïŒããã·ãïŒã¹ããªãŒã ã®æäœèšè¿°åPãžã®ãã€ã³ã¿ãŒãæ¢ã«å«ãŸããŠããå Žåãã¹ããªãŒã ïŒã¢ã¯ãã£ããšåŒã³ãŸãããïŒã¯ããã®æäœã®çš®é¡ã確èªããŸãã æäœãè£å®çãªå Žå
push
ãš
pop
ããããã¯çžäºã«åžåãããŸãïŒ
- ã¢ã¯ãã£ãã¹ã¬ããã
push
ãå®è¡ãããšãåŒæ°ãPèšè¿°åã«æžã蟌ã¿ãããã·ãã¹ã¬ããã®pop
æäœã«æž¡ããŸãã - ã¢ã¯ãã£ããªã¹ã¬ããã
pop
å Žåãè£å®çãªpush
æäœã®åŒæ°ããã³ãã«Pããèªã¿åããŸãã

次ã«ãã¢ã¯ãã£ãã¹ã¬ããã¯ãåé€é
åã»ã«ã®ãšã³ããªãåŠçæžã¿ãšããŠããŒã¯ããããã·ãã¹ããªãŒã ãããã¯ãªããçµäºãããšãã«ã誰ããéæ³ã®ããã«äœæ¥ãå®è¡ããããšã確èªããŸãã ãã®çµæãã¢ã¯ãã£ãã¹ã¬ãããšããã·ãã¹ã¬ããã¯
ãã¹ã¿ãã¯ã®æäžéšã«ã¢ã¯ã»ã¹ããã«æäœ
ãå®è¡ã
ãŸã ã
éžæããæ¶å»é
åã»ã«ã®æäœãåãå ŽåïŒããã·ã¥ããã·ã¥ãŸãã¯ããããããã®ç¶æ³ïŒãéã¯ãããŸããã ãã®å Žåãã¢ã¯ãã£ããªã¹ã¬ããã¯éåžžã®ããã¯ãªããå®è¡ããŠãããéåžžã©ãã
push
/
pop
ã¹ã¿ãã¯ãããã®CASïŒãå®è¡ããããšããŸãã
ããã¯ãªããçµäºããããã·ãã¹ããªãŒã ã¯ãæ¶å»é
åå
ã®èšè¿°åããã§ãã¯ããŸãã èšè¿°åã«æäœãå®äºãããšããã¡ã¢ãããå Žåãã€ãŸããè£å®çãªæäœãæã€å¥ã®ã¹ããªãŒã ãèŠã€ãã£ãå Žåãããã·ãã¹ããªãŒã ã¯ãã®
push
/
pop
æ£åžžã«å®äºããŸãã
äžèšã®ã¢ã¯ã·ã§ã³ã¯ãã¹ãŠãããã¯ãªãã§ããã¯ãªãã§å®è¡ããããããå®éã®ã¢ã«ãŽãªãºã ã¯èª¬æãããŠããã¢ã«ãŽãªãºã ãããè€éã§ãããæå³ã¯å€ãããŸããã
èšè¿°åã«ã¯ãæäœã³ãŒãïŒ
push
ãŸãã¯
pop
ïŒããã³æäœã®åŒæ°ãå«ãŸããŸãïŒ
push
ã®å Žåã远å ããèŠçŽ ãžã®ãã€ã³ã¿ãŒ
nullptr
ã®å Žåããã€ã³ã¿ãŒãã£ãŒã«ãã¯ç©ºã®ãŸãŸã§ãïŒ
nullptr
ïŒãé€å»ãæåããå Žåãåžå
push
æäœã®èŠçŽ ãžã®ãã€ã³ã¿ãŒãæžã蟌ãŸããŸãã
é€å»ããã¯ãªãã«ãããé«è² è·ã§ã¹ã¿ãã¯ã倧å¹
ã«ã¢ã³ããŒãããããšãã§ããäœã§ãã¹ã¿ãã¯ã®CASããããã»ãŒåžžã«æåããå Žåããã®ã¹ããŒã ã¯ãªãŒããŒãããããŸã£ããå°å
¥ããŸããã ã¢ã«ãŽãªãºã ã«ã¯åŸ®èª¿æŽãå¿
ââèŠã§ããããã¯ãã¿ã¹ã¯ãšå®éã®è² è·ã«å¿ããŠãæé©ãªæ¶å»é
åãµã€ãºãéžæããããšã«ãããŸãã ãŸããæäœäžã«é€å»é
åã®ãµã€ãºãå°ããªå¶éå
ã§å€åããè² è·ã«é©å¿ããå Žåãã¢ã«ãŽãªãºã ã®é©å¿ããŒãžã§ã³ãæäŸã§ããŸãã
äžåè¡¡ã®å Žåã
push
æäœãš
pop
æäœããããã§è¡ãããå Žå-
pop
ãªãã§å€ãã®
push
ã
push
ãªãã§å€ãã®
pop
-ã¢ã«ãŽãªãºã ã¯å
·äœçãªã²ã€ã³ãäžããŸããããåŸæ¥ã®Treiberã¢ã«ãŽãªãºã ãšæ¯èŒããŠããã©ãŒãã³ã¹ã®äœäžã¯ã»ãšãã©ãªãã¯ãã§ãã
ãã©ããçµå
ãããŸã§ãããã¯ããªãŒã¹ã¿ãã¯ã«ã€ããŠèª¬æããŸããã æ¬¡ã«ãéåžžã®ããã¯ããŒã¹ã®ã¹ã¿ãã¯ãèããŸãã
template <class T> class LockStack { std::stack<T *> m_Stack; std::mutex m_Mutex; public: void push( T& v ) { m_Mutex.lock(); m_Stack.push( &v ); m_Mutex.unlock(); } T * pop() { m_Mutex.lock(); T * pv = m_Stack.top(); m_Stack.pop() m_Mutex.unlock(); return pv; } };
æããã«ãç«¶åä»ç€Ÿã§ã¯ããã®ããã©ãŒãã³ã¹ã¯éåžžã«äœããªããŸããã¹ã¿ãã¯ãžã®ãã¹ãŠã®åŒã³åºãã¯ãã¥ãŒããã¯ã¹ã§ã·ãªã¢ã«åããããã¹ãŠãå³å¯ã«é çªã«å®è¡ãããŸãã ããã©ãŒãã³ã¹ãæ¹åããæ¹æ³ã¯ãããŸããïŒ
Nåã®ã¹ã¬ãããåæã«ã¹ã¿ãã¯ã«ã¢ã¯ã»ã¹ããå Žåããã®ãã¡ã®1ã€ã ãããã¥ãŒããã¯ã¹ããã£ããã£ããæ®ãã¯ãã¥ãŒããã¯ã¹ãè§£æŸãããã®ãåŸ
ã¡ãŸãã ããããmutexã§ååçã«åŸ
æ©ãã代ããã«ãåŸ
æ©äžã®ã¹ã¬ããã¯ãããã¯ãªãã®æé€ã®ããã«ãæäœãã¢ããŠã³ã¹ããåè
ã®ã¹ã¬ããïŒmutexã®ææè
ïŒã¯ãäœæ¥ã«å ããŠå
åŒããã¿ã¹ã¯ãå®è¡ã§ããŸãã ãã®ã¢ã€ãã¢ã¯ã2010幎ã«èšè¿°ããã仿¥ãŸã§çºå±ããŠãã
ãã©ããçµåã¢ãããŒãã®åºç€ã圢æããŸããã

ãã©ããçµåã¢ãããŒãã®ã¢ã€ãã¢ã¯ã次ã®ããã«èª¬æã§ããŸãã ç§ãã¡ã®å ŽåãåããŒã¿æ§é ãã¹ã¿ãã¯ã§ã¯ããã¥ãŒããã¯ã¹ãšãããªã±ãŒã·ã§ã³ãªã¹ãã¯ãã¹ã¿ãã¯ã§åäœããã¹ã¬ããã®æ°ã«æ¯äŸãããµã€ãºã«é¢é£ä»ããããŠããŸãã ã¹ã¿ãã¯ãžã®æåã®åŒã³åºãã®åã¹ã¬ããã¯ãã¹ã¬ããããŒã«ã«ã¹ãã¬ãŒãžïŒTLSïŒã«ããã¢ããŠã³ã¹ã¡ã³ãã®ãªã¹ãã«ãã®ã¬ã³ãŒãã远å ããŸãã æäœãå®è¡ããããšãã¹ã¬ããã¯ãã®ã¬ã³ãŒãïŒèŠæ±ïŒ
push
ãŸãã¯
pop
ïŒãšãã®åŒæ°ïŒã§èŠæ±ãçºè¡ããmutexããã£ããã£ããããšããŸãã ãã¥ãŒããã¯ã¹ããã£ããã£ããããšãã¹ããªãŒã
ã¯ã³ã³ãã€ãã«ãªããŸãïŒã³ã³ãã€ãã
ã³ã³ãã€ã³ã©ã ãšæ··åããªãã§ãã ããïŒïŒã¢ããŠã³ã¹ã¡ã³ãã®ãªã¹ããã¹ãã£ã³ãããããããã¹ãŠã®ãªã¯ãšã¹ããåéããããããå®è¡ããŸãïŒã¹ã¿ãã¯ã®å Žåãäžèšã§èª¬æããåé€ãé©çšã§ããŸãïŒãçµæãã¢ããŠã³ã¹ãªã¹ãã®èŠçŽ ã«æžã蟌ã¿ãæçµçã«ãã¥ãŒããã¯ã¹ãè§£æŸããŸãã ãã¥ãŒããã¯ã¹ããã£ããã£ãã詊ã¿ã倱æããå Žåãã³ã³ãã€ãããªã¯ãšã¹ããå®è¡ããã¢ããŠã³ã¹ã¡ã³ãã¬ã³ãŒãã«çµæãé
眮ãããšãã«ãã¹ã¬ããã¯ã¢ããŠã³ã¹ã¡ã³ãã§åŸ
æ©ïŒã¹ãã³ïŒããŸãã
ã¢ããŠã³ã¹ã¡ã³ãã®ãªã¹ãã¯ãããã管çãããªãŒããŒããããåæžããããã«èšèšãããŠããŸãã éèŠãªç¹ã¯ãã¢ããŠã³ã¹ã®ãªã¹ãããã£ãã«å€æŽãããªãããšã§ããããããªããšãããã¯ããªãŒãããªã±ãŒã·ã§ã³ãªã¹ããã¹ã¿ãã¯ã®åŽé¢ã«ãã蟌ãŸããã¹ã¿ãã¯èªäœãäœããã®åœ¢ã§é«éåãããå¯èœæ§ãäœããªããŸãã æäœã®èŠæ±ã¯ãã¢ããŠã³ã¹ã¡ã³ããªã¹ãã®æ¢åã®ãšã³ããªã«å
¥åãããŸããããã¯ãã¹ããªãŒã ã®ããããã£ã§ãããTLSã«ããããšãæãåºããŸãã äžéšã®ãªã¹ããšã³ããªã®ã¹ããŒã¿ã¹ã¯ã空ãã§ããå¯èœæ§ããããŸããããã¯ã察å¿ããã¹ã¬ãããçŸåšããŒã¿æ§é ïŒã¹ã¿ãã¯ïŒã§ã¢ã¯ã·ã§ã³ãå®è¡ããŠããªãããšãæå³ããŸãã éæãã³ã³ãã€ãã¯ã¢ããŠã³ã¹ã®ãªã¹ããéåŒããŠãé·æéã¢ã¯ãã£ãã§ãªãã¬ã³ãŒããé€å€ããŸãïŒãããã£ãŠããªã¹ããšã³ããªã«ã¯äœããã®çš®é¡ã®ã¿ã€ã ã¹ã¿ã³ããå¿
èŠã§ãïŒãããã«ããããªã¹ãã®è¡šç€ºã«ãããæéãççž®ãããŸãã
äžè¬ã«ããã©ããçµåã¯è€éãªããã¯ããªãŒããŒã¿æ§é ã«æ£åžžã«é©çšãããéåžžã«äžè¬çãªã¢ãããŒãã§ãããããšãã°ããã©ããçµåã¹ã¿ãã¯ã®å®è£
ã«æ¶å»ããã¯ãªãã远å ãããªã©ãããŸããŸãªã¢ã«ãŽãªãºã ãçµã¿åãããããšãã§ããŸãã ãããªãã¯ã©ã€ãã©ãªã®C ++ã§ã®ãã©ããçµåã®å®è£
ãéåžžã«è峿·±ãã¿ã¹ã¯ã§ããäºå®ãç ç©¶è«æã§ã¯ãã¢ããŠã³ã¹ã¡ã³ãã®ãªã¹ãã¯éåžžââãåã³ã³ãããªããžã§ã¯ãã®å±æ§ã§ãããåã³ã³ããã¯ã TLSã«ç¬èªã®ãšã³ããªããããŸãã ãã¹ãŠã®ãã©ãããªçµåãªããžã§ã¯ãã«å¯ŸããŠåäžã®å
¬éãªã¹ãã䜿çšããããäžè¬çãªå®è£
ãå¿
èŠã§ãããé床ãèœãšããªãããšãéèŠã§ãã
æŽå²ã¹ãã€ã©ã«å®è£
åã«æäœãçºè¡šãããšããèãæ¹ãããã¯ããªãŒã¢ã«ãŽãªãºã ã®ç ç©¶ã®å§ãŸãã«æ»ã£ãŠããã®ã¯è峿·±ãããšã§ãã1990幎代åé ãåŸæ¥ã®ããã¯ããŒã¹ã®ããŒã¿æ§é ãããã¯ããªãŒã«å€æããäžè¬çãªæ¹æ³ãæ§ç¯ããããšããŸããã çè«ã®èгç¹ããã¯ããããã®è©Šã¿ã¯æåããŠããŸãããå®éã«ã¯äœéã§ããã¯ã®ãªãéãã¢ã«ãŽãªãºã ãåŸãããŸãã ãããã®äžè¬çãªã¢ãããŒãã®ã¢ã€ãã£ã¢ã¯ãå®è¡åã«æäœãã¢ããŠã³ã¹ããããšã§ãããç«¶åããã¹ã¬ãããããã確èªããŠå®äºãæ¯æŽããããšã§ããã å®éã«ã¯ããã®ãããªããã«ããã¯ãããé害ã§ãããã¹ã¬ããã¯åãæäœãåæã«å®è¡ãããäºãã«ããã·ã¥ãããå¹²æžãããããŠããŸããã
ç©æ¥µçãªæ¯æŽããååçã«äœæ¥ãå¥ã®ããæåããã¹ããªãŒã ã«å§ä»»ãããŸã§ã匷調ã®å°ãã®åé
眮ãå¿
èŠã§ããã
ãããã«
ã¹ã¿ãã¯ã®ãããªåçŽãªããŒã¿æ§é ã¯ãæžãã¹ããã®ããªãããã«æããŸãããç«¶äºåã®ããããŒã¿æ§é ã®éçºã«éåžžã«å€ãã®è峿·±ãã¢ãããŒãã瀺ãããšãã§ããããšã¯é©ãã¹ãããšã§ãïŒ
ããã¯ãªãæŠç¥ã¯ ãããã¯ããªãŒã¢ã«ãŽãªãºã ã®æ§ç¯ã®ããããå Žæã«é©çšã§ããŸããååãšããŠãåæäœã¯ãæåããŸããããšããååã«åŸã£ãŠç¡éã«ãŒãã«å²ãŸããã«ãŒãæ¬äœã®æåŸãã€ãŸãå埩ã倱æãããšãã¯äžèŠã§ã¯ãããŸããããã¯ãªããèšå®ããŸããããã«ãããé«è² è·æã«éèŠãªã³ã³ããããŒã¿ãžã®å§åã軜æžã§ããŸãã
é€å»ã®ããã¯ãªãã¯ãã¹ã¿ãã¯ããã³ããã»ã©ã§ã¯ãªãããã¥ãŒã«é©çšããããããŸãäžè¬çã§ã¯ãªãã¢ãããŒãã§ãã
è¿å¹Žéçºããã
ãã©ããã³ã³ãã€ã³ã¯ãç«¶åã®ãªãã³ã³ããã®æ§ç¯ã«ãããç¹å¥ãªåŸåã§ããããã¯ããªãŒãšãã¡ã€ã³ã°ã¬ã€ã³ããã¯ããŒã¹ã®äž¡æ¹ã§ãã
å°æ¥ãããã®ãã¯ããã¯ã«åºäŒããããšãé¡ã£ãŠããŸãã
ããã¯ããªãŒã®ããŒã¿æ§é éå§ããåºæ¬ïŒ
äžïŒ
å€ããïŒ